Java零基础学习010-面向对象第四天

面向对象第四天:

潜艇游戏第一天:

  1. 设计了6个类,创建World类并测试

潜艇游戏第二天:

  1. 给6个类添加构造方法,并测试

潜艇游戏第三天:

  1. 设计侦察潜艇数组、鱼雷潜艇数组、水雷潜艇数组、水雷数组、炸弹数组,并测试
  2. 设计SeaObject超类,设计6个类继承超类
  3. 在超类中设计两个构造方法,6个类分别调用

潜艇游戏第四天:

  1. 将侦察潜艇数组、鱼雷潜艇数组、水雷潜艇数组统一组合为SeaObject数组,并测试
  2. 在6个派生类中重写move()移动,并测试(单元测试)
  3. 画窗口:在World类中,3步--------不要求掌握
    • imoprt JFrame+JPanel
    • 设计World类继承JPanel-------------这步特别容易忘记
    • main中那8句话------CV大法

回顾:

  1. 引用类型数组:

    • 给元素赋值需要new个对象

    • 访问需要通过数组元素去打点

      Student[] stus = new Student[3];
      stus[0] = new Student("zhangsan",25,"LF");
      System.out.println(stus[0].name);
      
  2. 继承:

    ​ 代码复用,通过extends来实现继承,超类:共有的 派生类:特有的

    ​ 派生类可以访问:派生类的+超类的 超类不能访问派生类的

    ​ 单一继承,传递性

    ​ 规定:构造派生类之前必须先构造超类

    ​ 派生类构造中若不调用超类构造,则默认super()调超类无参构造

    ​ 派生类构造中若自己调用了超类构造,则不再默认提供

  3. super:指当当前对象的超类对象

    super.成员变量名---------------------------访问超类的成员变量

    super.方法名()--------------------------------调用超类的方法

    super()------------------------------------------调用超类的构造方法

笔记:

  1. 向上造型:

    • 超类型的引用指向派生类的对象
    • 能点出来什么,看引用的类型-----------这是规定,记住就行了
    public class UploadDemo {
        public static void main(String[] args) {
            Aoo o1 = new Aoo();
            o1.a = 1;
            o1.show();
            //o1.b = 2;  //编译错误,超类不能访问派生类的
            //o2.test(); //编译错误
    
            Boo o2 = new Boo();
            o2.b = 1;
            o2.test();
            o2.a = 2;  //正确,派生类可以访问超类的
            o2.show(); //正确
    
            Aoo o3 = new Boo(); //向上造型
            o3.a = 1;
            o3.show();
            //o3.b = 2;  //编译错误,能点出来什么,看引用的类型
            //o3.test(); //编译错误
        }
    }
    
    class Aoo{
        int a;
        void show(){
        }
    }
    class Boo extends Aoo{
        int b;
        void test(){
        }
    }
    
  2. 方法的重写(override/overriding):重新写

    • 发生在父子类中,方法名相同,参数列表相同------派生类中重写了超类的方法
    • 重写方法被调用时,看对象的类型--------这是规定,记住就行了
    class 餐馆{
        void 做餐(){ 做中餐 }    //思考+下课------------3:10继续
    }
    //1)我还是想做中餐-------------不需要重写
    class Aoo extends 餐馆{
    }
    //2)我想改做西餐---------------需要重写
    class Aoo extends 餐馆{
        void 做餐(){ 做西餐 }
    }
    //3)我想在中餐之上加入西餐-------需要重写(先super中餐,再加入西餐)
    class Aoo extends 餐馆{
        void 做餐(){
            super.做餐(); + 做西餐
        }
    }
    
    • 重写需遵循"两同两小一大"原则:-----------一般都是一模一样的,了解即可

      • 两同:
        • 方法名相同
        • 参数列表相同
      • 两小:
        • 派生类方法的返回值类型小于或等于超类方法的
          • void和基本类型时,必须相等
          • 引用类型时,可以小于或等于
        • 派生类方法抛出的异常小于或等于超类方法的------------API时再说
      • 一大:
        • 派生类方法的访问权限大于或等于超类方法的-------------明天上午讲
      //超类大,派生类小
      class Coo{
          void show(){}
          double test(){ return 0.0; }
          Student say(){ return null; }
          Person sayHi(){ return null; }
      }
      class Doo extends Coo{
          //int show(){ return 1; } //编译错误,void时必须相等
          //int test(){ return 0; } //编译错误,基本类型时必须相等
          //Person say(){ return null; } //编译错误,引用类型时必须小于或等于
          Student sayHi(){ return null; } //正确,Student小于Person
      }
      
  3. 重写与重载的区别:-------------常见面试题

    • 重写(override):发生在父子类中,方法名相同,参数列表相同
    • 重载(overload):发生在同一类中,方法名相同,参数列表不同

精华笔记:

  1. 向上造型:
    • 超类型的引用指向派生类的对象
    • 能点出来什么,看引用的类型-----------这是规定,记住就行了
  2. 方法的重写(override/overriding):重新写
    • 发生在父子类中,方法名相同,参数列表相同------派生类中重写了超类的方法
    • 重写方法被调用时,看对象的类型----------------------这是规定,记住就行了
    • 重写需遵循"两同两小一大"原则:-----------一般都是一模一样的,了解即可
      • 两同:
        • 方法名相同
        • 参数列表相同
      • 两小:
        • 派生类方法的返回值类型小于或等于超类方法的
          • void和基本类型时,必须相等
          • 引用类型时,可以小于或等于
        • 派生类方法抛出的异常小于或等于超类方法的------------API时再说
      • 一大:
        • 派生类方法的访问权限大于或等于超类方法的-------------明天上午讲
  3. 重写与重载的区别:-------------常见面试题
    • 重写(override):发生在父子类中,方法名相同,参数列表相同
    • 重载(overload):发生在同一类中,方法名相同,参数列表不同

补充:

  1. 继承要符合is(是)的关系

  2. 何时向上造型:

    • 当多种角色所干的事几乎一样时,可以将它们统一造型到一个数组中,复用

      eg: 学生/老师/医生都在输出名字并问好,就将它们统一造型到Person数组中,一个for

      ​ 即可,实现代码的复用

      eg:所有潜艇能干的事几乎都一样,所以将三种潜艇统一造型到SeaObject数组中

  3. 明日单词:

    1)status:状态
    2)package:3)import:导入
    4)public:公开的
    5)protected:受保护的
    6)private:私有的
    7)card:8)id:号码
    9)password/pwd:密码
    10)balance:余额
    11)pay:支付
    12)money:金额
    13)check:检查
    14)static:静态的
    15)image:图片
    16)icon:图标
    17)get:获取
    

你可能感兴趣的:(Java零基础进阶,Java基础练习题,java,intellij-idea,学习)