Java 父类引用指向子类对象 学习

Java父类指针指向子类对象

在使用Java语言的时候,发现好多代码是这样写的

Parent obj = new Child();

即父类指针指向了子类对象,这样写有什么好处呢?

这其实是实现多态的一种方法。

什么是多态

多态是指同一个行为具有多个不同表现形式或形态的能力。

即多态就是同一个接口,使用不同的实例而执行不同的操作。

多态存在的三个必要条件

  • 继承
  • 重写(Override)
  • 父类引用指向子类对象:Parent o = new Child();
public class parent{
    void show() {
        System.out.println("parent show");
    }
}
public class child extends parent{
    @Override
    void show() {
        System.out.println("child show");
    }
}

如上,child类重写了父类的show方法。

public class test {
    public static void main(String[] args) {
        parent o = new child();
        o.show();
    }
}

此时,o.show()将输出child show,即优先调用子类的该方法。

如果将子类的show方法删除,那么就会调用父类的show方法

这就是多态的表现。

练习

父类

public class parent{
    public void func1() {
        func2();
    }
    public void func2() {
        System.out.println("parent func2");
    }
}

子类

public class child extends parent{
    public void func1(int num) {
        System.out.println("child func1");
    }
    @Override
    public void func2() {
        System.out.println("child func2");
    }
}

parent p = new child(); p.func1();

会输出什么呢?

child类继承了parent类,并重载(overload)了父类fun1方法,重写了(override)func2方法。

使用p对象调用func1()方法,由于子类中没有func1()(注意,子类重载的func1方法不一样)。

所以会调用父类的func1(),父类的func1()调用了func2()方法,由于子类重写了func2()方法,会优先调用子类的func2()

故结果输出是“child func2”

总结

父类引用指向子类对象特点如下(即Java多态特点):

  • 使用父类引用指向子类对象
  • 该引用只能调用父类中定义的方法和变量
  • 如果子类重写了父类的某一个方法,那么调用该方法时会调用子类的这个方法
  • 变量不能被重写(override),该概念只针对方法。
posted @ 2023-02-09 16:06  Dre_am_tale  阅读(591)  评论(0编辑  收藏  举报