精华笔记:

  1. 向上造型:——————————————–代码复用

    • 超类型的引用指向派生类的对象

    • 能点出来什么,看引用的类型—————-这是规定,记住就OK

      何时向上造型:

      • 多种角色能干的事都一样的时候,可以将多种角色统一造型到超类数组中,实现代码复用

        eg: 学生/老师/医生都是输出名字+问好——干的事都一样,

        ​ 就可以将学生/老师/医生统一造型到Person数组中,这样一个for即可——-代码复用

  2. 方法的重写(override/overriding):重新写、覆盖

    • 发生在父子类中,方法名相同,参数列表相同
    • 重写方法被调用时,看对象的类型———————–这是规定,记住就OK
    • 重写需遵循”两同两小一大”原则:————————-了解,一般都是一模一样的
      • 两同:
        • 方法名相同
        • 参数列表相同
      • 两小:
        • 派生类方法的返回值类型小于或等于超类方法的
          • void和基本类型时,必须相等
          • 引用类型时,小于或等于
        • 派生类方法抛出的异常小于或等于超类方法的————————API时讲
      • 一大:
        • 派生类方法的访问权限大于或等于超类方法的————————明天讲
  3. 重写与重载的区别:———-常见面试题

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

笔记:

  1. 向上造型:——————————————–代码复用

    • 超类型的引用指向派生类的对象

    • 能点出来什么,看引用的类型—————-这是规定,记住就OK

      何时向上造型:

      • 多种角色能干的事都一样的时候,可以将多种角色统一造型到超类数组中,实现代码复用

        eg: 学生/老师/医生都是输出名字+问好——干的事都一样,

        ​ 就可以将学生/老师/医生统一造型到Person数组中,这样一个for即可——-代码复用

      public class UploadDemo {
          public static void main(String[] args) {
              Aoo o1 = new Aoo();
              o1.a = 1;
              o1.show();
              //o1.b = 2;  //编译错误
              //o1.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):重新写、覆盖

    • 发生在父子类中,方法名相同,参数列表相同

    • 重写方法被调用时,看对象的类型———————–这是规定,记住就OK

      class 餐馆{
          void 做餐(){ 做中餐 }
      }
      //1)我还是想做中餐-----------------不需要重写
      class Aoo extends 餐馆{
      }
      //2)我想改做西餐-------------------需要重写
      class Aoo extends 餐馆{
          void 做餐(){ 做西餐 }
      }
      //3)我想在中餐基础之上加入西餐--------需要重写(先super中餐,再加入西餐)
      class Aoo extends 餐馆{
          void 做餐(){
              super.做餐();
              做西餐
          }
      }
      
    • 重写需遵循”两同两小一大”原则:————————-了解,一般都是一模一样的

      • 两同:

        • 方法名相同
        • 参数列表相同
      • 两小:

        • 派生类方法的返回值类型小于或等于超类方法的

          • void和基本类型时,必须相等

          • 引用类型时,小于或等于

            //超类大,派生类小---------爸爸大,儿子小
            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
            }
            
        • 派生类方法抛出的异常小于或等于超类方法的————————API时讲

      • 一大:

        • 派生类方法的访问权限大于或等于超类方法的————————明天讲
  3. 重写与重载的区别:———-常见面试题

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

补充:

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

  2. 超类的意义:

    • 封装共有的属性和行为———————-实现代码复用
    • 为所有派生类提供了统一的类型———-向上造型(实现代码复用)