Java 向上转型小白学习总结

Java 向上转型是指父类的引用指向子类的对象

说通俗一点,假设某个爸爸和他的孩子,把他的孩子当作爸爸看待,做他爸爸干的事儿,(访问父类的成员变量和方法,包括被子类重写的方法)。

但是孩子自己独有的那些本领(子类特有的成员变量和方法),你通过把他当作爸爸的这种看法,是没法让他展示出来的

也就是说,向上转型后,虽然我们用的是父类的称呼(引用),但实际上那个东西还是原来的孩子(子类对象),只是我们暂时只能让他表现像爸爸那部分特点

代码中,别人要的是爸爸类型,这时候把小孩传过来,这是就不能把这个小孩当小孩看,因为人家要的是爸爸类型,孩子继承爸爸,孩子也是爸爸,把孩子当爸爸看合情合理。

在向上转型中,对象在内存中仍然是子类的对象,只是通过父类的引用去操作它

从类型的角度来看,引用的类型是父类,但实际指向的对象是子类。这意味着,通过这个父类引用调用方法时,如果子类重写了父类的方法,会执行子类重写的版本;但对于子类特有的方法和成员变量,无法通过这个父类引用直接访问。

所以,本质上对象还是属于子类,但在引用和操作的层面,使用的是父类的类型。

这是 Java 语言故意这样设计的,是基于面向对象编程的原则和理念。

这样的设计有助于实现封装、继承和多态的特性,提高代码的可读性、可维护性和安全性。它强制开发者更清晰地思考对象之间的关系,避免混乱和错误的使用,使得程序的结构更加合理和稳定

向上转型中父类类型的引用变量不能调用子类特有的方法,主要基于以下几个原因:

  1. 封装和多态的原则:向上转型的目的是为了以更通用的方式处理对象,强调对象的共性(即父类定义的公共属性和方法)。如果允许通过父类引用调用子类特有的方法,就破坏了封装性和多态性的设计原则,使得父类的引用能够访问到子类特有的、可能不一致的行为。

  2. 类型安全性:Java 是一种强类型语言,编译器需要在编译时确保类型的正确性和安全性。父类并不知道子类特有的方法,因此不允许通过父类引用直接调用,以防止在运行时出现不可预测的错误。

  3. 设计的一致性和可维护性:如果允许这样做,会使代码的结构和逻辑变得混乱,降低代码的可读性和可维护性。开发人员可能会在不知情的情况下错误地使用父类引用调用子类的特有方法,导致难以理解和调试的问题。

总之,这种限制有助于保持代码的清晰、一致和可预测性,符合面向对象编程的原则和设计理念

演示代码如下:

class Parent {
    public void method() {
        System.out.println("Parent's method");
    }
}

class Child extends Parent {
    @Override
    public void method() {
        System.out.println("Child's method");
    }

    public void childSpecificMethod() {
        System.out.println("This is a child specific method");
    }
}

public class UpcastingExample {
    public static void main(String[] args) {
        // 向上转型
        Parent parent = new Child();

        parent.method();  // 输出:Child's method

        // 以下代码会报错,因为不能通过父类引用访问子类特有的方法
        // parent.childSpecificMethod();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值