[Java基础]day4

super

  1. 用于调用父类的原方法(而非子类中重写的方法),but需要满足封装性为前提(即子类需有调用该方法的权限)
  2. 在子类构造器中调用父类构造器,且super必须放于构造器首行(同调用其它构造器使用this()一样),空参的子类构造器默认调用父类构造器。
    public Child() {
        super();//()中写形参列表,用以调用对应的父类构造器
        System.out.println("Child Constructor");
    }
    public Child() {
        this();//()中写形参列表,用以调用其他重载的构造器方法
        System.out.println("Child Constructor");
    }
    public Child() {
        //会调用父类构造器
    }

方法调用,与属性访问:

  1. 方法调用时,坚持就近原则,先在该类中找,如找不到,再向父类找…逐层寻找;
  2. 属性也坚持就近原则;
  3. 而加了super的属性及方法,会跳过当前类,直接从父类开始找…逐层寻找;

多态

父类的引用指向子类的对象

下图中,动物包含多种(对应多个子类),通过同一个方法便可创建多种子类对象,进而调用不同子类的重写方法。

多态的应用

编译看左边,运行看右边(编译器认为创建的是父类对象并且调用父类的方法,实际运行时调用的是子类的方法)

  1. 使用多态访问属性,访问的是父类的属性(前提是父类要有此属性,并且子类有访问权限)、
  2. 多态情况下创建的对象无法直接调用特有的(左边引用没有的,即父类没有的)属性和方法
  3. but,多态情况下,可通过向下转型,再调用子类特有方法,访问子类特有的属性

向下转型前一般进行判断处理

Leave a Reply

Your email address will not be published. Required fields are marked *