day--14

继承 extends

  • 继承是类之间的关系,只有单继承,没有多继承。(一个子类只能直接继承一个父类,注意直接的意思,因为它的父类也继承了别的类,那么子类也间接的继承了这个类)
  • 子类继承父类就可以调用父类的全部方法
  • student extends person; 学生继承了人 学生是子类(派生类) persons是父类(基类)
  • 子类可以继承父类,注意private是不可以直接继承的 私有的无法被继承。
  • Ctrl+H; 显示继承树谱
  • 所有的类都默认直接或间接继承 Object

This Super

//父类
public class person{
    protected String name = "yujian";
}
//子类
public class Student extends Person{  //Student继承了Person
    private String name = "kunlun";
    System.out.println(this.name); //当前类的 kunlun
    System.out.println(super.name); //父类里的 yujian 
}
//父类
public class person{
    protected String name = "yujian";
    
    public void print(){ //这里的print是此类里的方法 
        System.out.println("person")
    }
}
//子类
public class Student extends Person{  //Student继承了Person
    private String name = "kunlun";
    public void print(){  //这里的print是个方法 
        System.out.println("stundent")
    }
   public void text(){
       this.print();   //调用自己的print方法
       super.print();  //调用父类的print方法
   }

super 和 this的注意点

  • super调用父类的构造方法吗,必须在构造方法的第一行

  • super 必须只能出现在子类的方法或者构造方法中

  • super 和 this 不能同时调用构造方法,因为它们都必须要写在第一行。所以只能选其一

  • 代表的对象:
    1. this:本身调用这个对象(自己调用自己)
    1. super:代表父类对象的应用

  • 前提:

    1. this:没有继承也可以使用
    2. super:只能在继承条件下才能使用,而且只能在子类中
  • 构造方法:

    1. this();本类的构造
    2. super();父类的构造

方法的重写(和属性无关,都是方法的重写)

  • 重写只跟非静态方法无关,因为静态方法一开始就在了

  • 重写

    1. 需要有继承关系,子类重写父类
    2. 方法名必须相同
    3. 参数列表必须相同
    4. 修饰符:范围可以扩大(排序 public > protected > default > private )
    5. 抛出的异常:范围可以被缩小,但不能扩大
    6. 子类的方法和父类必要一致;方法体不同
  • 为什么要重写:

    父类的功能,子类不一定需要,或者不能满足! Alt + Insert ; override

多态

注意事项:

 1. 多态是方法的多态,属性没有多态
 1. 父类和子类,有联系  类型转换异常!ClassCastException
 1. 存在条件:继承关系,方法需要重写,父类引用指向子类对象!  Father  f1 = new Son() ;
 1. static(属于类,它不属于实例)、final (常量)、private(私有的)是不能重写的,更不可能写多态了
  • instanceof 类型转换 引用类型的转换
public static void main(string[] args){
    
    //Object > person > student 
    //Object > person
    //Object >
    //Object > person > teacher
    //Object > String
    上面是继承关系  决定是Ttue 还是 False
    Object object = new student();
    System.out.println(object indtanceof Student);  // true
    System.out.println(object indtanceof Person);  // true
    System.out.println(object indtanceof Object);  // true
    System.out.println(object indtanceof Teacher);  //false
    System.out.println(object indtanceof String);   //false
}

System.out.println(x instanceof y ); 能不能编译通过,主要取决于 x 和 y 是不是继承关系

  • 父类的引用指向子类的对象
  • 把子类转换为父类,向上转型;
  • 把父类转换为子类,向下转换;强制转换
  • 方便方法的调用,减少重复的代码!简洁

posted on 2022-05-11 18:29  遇见上帝  阅读(20)  评论(0)    收藏  举报