• day03


    JavaDay03总结

    1、Error:(28, 1) java: 无法将类 Stu中的构造器 Stu应用到给定类型;
    需要: int,java.lang.String,float
    找到: 没有参数
    原因: 实际参数列表和形式参数列表长度不同
    修改:构造方法不会继承,当父类有带参构造方法时,子类要继承父类,父类需添加无参构造方法
    2、继承class 子类 extends 父类 子类拥有父类的属性和方法,父类的private修饰的属性不能被子类继承,若不希望子类继承父类的某个属性,则将该属性定义为private;之类最多直接继承一个父类,java所有类都是Object类的子类
    3、重载:1.方法名相同 2.参数类型和个数至少一个不同 3.返回类型和修饰符可以不同
    4、覆盖:子类有一个方法,与父类某方法的名称、返回类型、参数相同,则称子类方法覆盖父类方法;注:子类方法不能缩小父类方法的访问权限
    5、多态:一个引用在不同情况下的多种状态,也可这样理解:通过指向父类的指针来调用不同子类中实现的方法;java允许父类的引用变量引用它的子类实例

    这里写/*
    作者:mys
    功能:演示多态性
    日期:2018/7/13
     */
    package cn.mys;
    
    public class Demo11
    {
        public static void main(String []args)
        {
            /*Animal animal=new Animal();
            animal.show();
            Cat cat=new Cat();
            cat.show();
            Dog dog=new Dog();
            dog.show();
            */
           /* 父类的引用变量引用它的子类
    	    Animal an=new Cat();
            an.show();
            an=new Dog();
            an.show();*/
           Master master=new Master();
           master.feed(new Cat(),new Fish());
           master.feed(new Dog(),new Bone());
        }
    }
    //食物
    class Food
    {
        public void showName()
        {
            System.out.println("不知道什么名字");
        }
    }
    //鱼类
    class Fish extends Food
    {
        public void showName() {
            System.out.println("鱼类");
        }
    }
    //骨头类
    class Bone extends Food
    {
        public void showName()
        {
            System.out.println("骨头类");
        }
    }
    //人类
    class Master
    {
        //给动物喂食
        public void feed(Animal an,Food f)
        {
            an.eat();
            f.showName();
        }
    }
    //父类Animal
    class Animal
    {
        public void show()
        {
            System.out.println("我是动物类!");
        }
        //动物吃
        public void eat()
        {
            System.out.println("我不知道吃什么!");
        }
    }
    //子类Cat
    class Cat extends Animal
    {
        //覆盖父类
        public void show()
        {
            System.out.println("我是猫类!");
        }
        //猫吃鱼
        public void eat()
        {
            System.out.println("猫吃鱼!");
        }
    }
    //子类Dog
    class Dog extends Animal
    {
        //覆盖父类
        public void show()
        {
            System.out.println("我是狗类!");
        }
        //狗吃骨头
        public void eat()
        {
            System.out.println("狗吃骨头!");
        }
    }
    
    

    6、约瑟夫问题

    /*
    作者:mys
    功能:约瑟夫
    日期:2018/7/13
    */
    /*
    问题:设编号1 2 3 4....n的n个人围成一圈,约定编号为k的人开始从1报数,
          数到m的那个人出列,他的下一位又从1开始报数,直到所有人出列。
    */
    package cn.mys;
    
    public class Josephu
    {
        public static void main(String []args)
        {
            //创建一个环形链表
            CycLink cyclink=new CycLink();
            cyclink.setLen(5);//链表长度
            cyclink.createLink();//初始化链表
            cyclink.show();//显示链表
            cyclink.setK(2);//设置开始数数人的编号
            cyclink.setM(2);//设置数到几的人退出
            cyclink.play();//开始数数
        }
    }
    //定义一个小孩类
    class Child
    {
        int num;//编号
        Child nextChild=null;//指向下一个小孩
        public Child(int num)//初始化编号
        {
            this.num=num;
        }
    }
    //定义环形链表
    class CycLink
    {
        //定义一个指向第一个小孩的引用
        Child firstChild=null;
        Child temp=null;
        int len=0;
        int k=0;
        int m=0;
        //设置m
        public void setM(int m)
        {
            this.m=m;
        }
        //设置k
        public void setK(int k)
        {
            this.k=k;
        }
        //设置链表大小
        public void setLen(int len)
        {
            this.len=len;
        }
        //初始化循环链表
        public void createLink()
        {
            for(int i=1;i<=len;i++)
            {
                if(i==1)
                {
                //创建第一个小孩
                Child ch = new Child(i);
                this.firstChild=ch;
                this.temp=ch;
                }
                else if(i==len)
                {
                    //创建最后一个小孩
                    Child ch=new Child(i);
                    temp.nextChild=ch;//搭桥
                    temp=ch;//temp向下走一步
                    temp.nextChild=firstChild;//环形链表最后一个小孩指向第一个小孩
                }
                else
                {
                    //继续创建小孩
                    Child ch = new Child(i);
                    temp.nextChild=ch;//搭桥
                    temp=ch;//temp向下走一步
                }
            }
        }
        //显示链表
        public void show()
        {
            Child temp=firstChild;//从第一个小孩开始
            do {
                System.out.println(temp.num);
                temp=temp.nextChild;
            }while(temp!=firstChild);
        }
        //开始play
        public void play()
        {
            while(len!=1)
            {
                //1.找到开始数数的人
                Child temp = firstChild;
                for (int i = 1; i < k; i++)//注意此处i!=k
                {
                    temp = temp.nextChild;
                }
                //2.数m下
                for (int j = 1; j < m; j++) {
                    temp = temp.nextChild;
                }
                //找到要出圈小孩的前一个小孩
                Child temp2 = temp;//temp2从temp开始
                while (temp2.nextChild != temp)//找到temp2,其下一个小孩等于temp小孩
                {
                    temp2 = temp2.nextChild;
                }
                //3.将数到m的小孩退出圈
                temp2.nextChild = temp.nextChild;
                temp = temp.nextChild;//temp指向下一个数数的小孩
                this.len--;
            }
            //打印最后一个小孩
            System.out.println("最后一个小孩:"+temp.num);
        }
    }
    
    

    7、抽象类:当父类的方法不能确定时,用abstract关键字修饰该方法(抽象方法),该类(抽象类);当一个继承类的父类是抽象类的话,需要把抽象类中的所有方法全部实现
    注意事项:

    1. 抽象类不能被实例化
    2. 抽象类不一定有抽象方法
    3. 一旦类包含了abstract方法,则该类必须声明为abstract
    4. 抽象方法不能有主体eg.abstract void aaa(){}错误
    /*
    作者:mys
    功能:抽象类的必要性
    日期:2018/7/13
     */
    package cn.mys;
    
    public class Demo12 {
        public static void main(String []args)
        {
            Cat cat=new Cat();
            //Animal an=new Animal(); 抽象类不能被实例化
        }
    }
    //父类Animal(抽象类)
    abstract class Animal
    {
    	 //叫
         //abstract public void cry(); 抽象类不一定有抽象方法
         // abstract public void cry(){} 抽象方法不能有主体
         public void aaa()//抽象类中可以有实现了的方法:普通方法
         {
    	     System.out.println("aaa");
         }
    }
    
    //子类Cat
    // 当一个继承类的父类是抽象类的话,需要把抽象类中的所有方法**全部实现**
    class Cat extends Animal
    {
        //实现父类
        public void cry()
        {
            //do nothing...
        }
    }
    
    

    8、接口:给出一些没有内容的方法,封装到一起,某各类要使用的时候,根据具体情况写出方法,语法:class 类名 implements 接口{ 方法; 变量;}
    注意事项

    • 1.接口不能实例化
      2.接口中所有的方法都不能有主体
      3.一个类可以实现多个接口
      4.接口中可以有变量(但不能被private、protected修饰)
      【a】接口中的变量都是 static,且是final类型,因此在定义时需要初始化
      【b】java开发中,将常用的变量定义在接口中,作为全局变量使用。访问方式:接口名.变量名
      5.一个接口不能继承其他的类,但可以继承别的接口
      小结:接口是更加抽象的抽象类,抽象类中的方法可以有主体,而接口中的方法都没有主体,接口体现了多态和高内聚低耦合的设计思想。
    /*
    作者:mys
    功能:接口(计算机 USB 相机 手机)
    日期:2018/7/13
     */
    package cn.mys;
    
    public class Demo13 {
        public static void main(String []args)
        {
            //在接口中定义的变量通过*接口名.变量名*调用
            System.out.println(Usb.a);
            //创建一个计算机
            Computer computer=new Computer();
            //创建一个相机
            Camera camera=new Camera();
            //创建一个手机
            Phone phone=new Phone();
            //使用接口
            computer.useUsb(camera);
            computer.useUsb(phone);
            //Usb Usb=new Usb();接口不能实例化
        }
    }
    //usb接口
    interface Usb
    {
        //接口可以定义变量,且变量是static,因此在定义时也要初始化
        int a=1;
        //声明两个方法
        //开始工作
        public void start();
        //停止工作
        public void stop();
        //public void stop(){} 接口中所有方法不能有主体
    }
    //一个类
    class Bbb
    {
    
    }
    //一个接口,不能继承其他的类
    /*interface Aaa extends Bbb
    {
    
    }*/
    //一个接口
    interface Aaa 
    {
    
    }
    //编写相机类,并实现Usb接口
    //一个重要原则:当一个类实现了一个接口,就要把该接口的方法都实现
    class Camera implements Usb,Aaa//一个类可以实现多个接口
    {
        //实现两个方法
        public void start()
        {
            System.out.println("相机开始工作");
        }
        public void stop()
        {
            System.out.println("相机停止工作");
        }
    }
    //编写手机类
    class Phone implements Usb
    {
        //实现两个方法
        public void start()
        {
            System.out.println("手机开始工作");
        }
        public void stop()
        {
            System.out.println("手机停止工作");
        }
    }
    //编写计算机类
    class Computer
    {
        //使用Usb接口
        public void useUsb(Usb usb)
        {
            usb.start();
            usb.stop();
        }
    }
    
    
  • 相关阅读:
    记一次在黑盒环境下使用网络设备(华为)寻找主机
    mips交叉编译zlib
    Python 爬虫 之LOL皮肤图片抓取
    gitlab 新建项目 并将本地项目上传
    flask项目目录结构
    SQLALCHEM 初始化数据库
    python连接access数据库查询
    .Net Core 3.1 -- APISIX2.6 微服务网关入门
    SqlServer Agent代理无法启动(启动后自动关闭)的解决方法
    Centos7安装配置DNS服务器
  • 原文地址:https://www.cnblogs.com/xq-mys/p/9305469.html
Copyright © 2020-2023  润新知