【java】如何理解父类引用子类对象

"父类引用指向子类对象"是Java(以及许多其他面向对象的编程语言)的一个基本概念,与多态(Polymorphism)密切相关。为了更好地理解这个概念,我们首先分解它,然后通过示例进行解释。

1. 父类引用

这意味着你声明了一个变量,其类型是某个类(称为父类或超类)。

Parent parent;

2. 子类对象

子类(或称为派生类)是从另一个类(父类)继承的类。当你创建一个子类的实例或对象时,你实际上得到了一个包含子类属性和父类属性的对象。

Child child = new Child();

3. 父类引用指向子类对象

你可以使用父类的引用来引用子类的对象。

Parent parent = new Child();

这是有效的,因为子类是父类的一个扩展。这意味着子类对象同时也是一个父类对象(is-a关系)。

多态的实现

使用父类引用指向子类对象是多态的核心。当你通过父类引用调用一个被子类重写的方法时,Java的运行时多态机制将确保调用的是子类的方法版本,而不是父类的。

考虑以下示例:

class Parent {
    void display() {
        System.out.println("Display method in Parent class.");
    }
}

class Child extends Parent {
    @Override
    void display() {
        System.out.println("Display method in Child class.");
    }
}

public class TestPolymorphism {
    public static void main(String[] args) {
        Parent obj = new Child();
        obj.display();  // Outputs: Display method in Child class.
    }
}

在上述代码中,尽管obj的类型是Parent,但实际引用的对象是Child类的实例。因此,当调用obj.display()时,运行时多态机制确保调用的是Child类的display方法。

对于多态,可以总结它为:

一、使用父类类型的引用指向子类的对象;

二、该引用只能调用父类中定义的方法和变量;

三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用)

四、变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。

多态的3个必要条件:

    1.继承   2.重写   3.父类引用指向子类对象。

注意

虽然父类引用可以引用子类对象,但父类引用只能访问父类中声明的属性和方法,不能直接访问子类特有的方法或属性。如果需要访问子类特有的功能,你可能需要进行类型转换。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值