java a a new b_Java A b = new B(); B继承A .

这篇博客探讨了Java中的向上转型概念,即父类引用指向子类实例的过程。内容涉及多态性,指出子类可以覆盖父类的方法,并在调用时根据运行时类型确定实际执行的方法。此外,还解释了静态成员的初始化顺序,以及如何通过向上转型访问子类特有的成员变量和方法。
摘要由CSDN通过智能技术生成

A b=new B():

因为B类是A类的子类,所以上面语句发生了向上转型. new B()会在堆内存中产生一个B类的实例,

A b会在栈内存中产生一个A类的引用.

A b = new B()会让b指向堆内存中的new B()实例,但是该实例时B类的实例,这是就会发生向上转型.

如果子类中存在和父类相同名称和参数的方法,这种情况叫做多态性,子类覆写父类方法,

发生向上转型后,调用这种被子类覆写过的方法,那么会直接调用类B的方法show().

再问: 什么是向上转型? 我第二问原本是觉得结果应该是这样的: Class A: a=3 d=Java program. Class B: a=3 d=Java program. 我就是不懂,为什么A b = new B(); 会是A的成员变量,而不是B的成员变量

再答: 向上转型是java多态的知识,所谓向上转型,就是让父类引用变量指向子类实例. 正常情况下是:栈内存中的子类引用变量指向堆内存中的子类实例, 本质来说:java对象类型有编译时类型和运行时类型,编译时类型是定义时指定的类型,运行时类型是申请空间之后实际赋予的类型,当编译时类型与运行时类型不同时就叫做多态. 比如此题.A b=new B()它的编译时类型是A类,运行时类型是B类,所以这就发生了多态, 其中将子类实例赋给父类引用叫向上转型. 将子类实例赋给父类引用,再将该父类引用赋给另一个子类引用,这叫做向下转型.

再问: 向上转型,A a = new B(); B继承A a对象会遗失和父类不同的方法,也会覆盖与父类相同的方法。 如果A类和B类都有静态方法,会在类加载的时候被首先执行,然后再执行他们的构造方法。 publicclass A { publicint m = 1; publicvoid view(){ System.out.println(this.m); System.out.println(this.getClass()); } }

再答: 静态成员总是会在类实例化之前被初始化,这是因为静态成员属于类,而不属于某个实例. 如果你还想访问a对象中与父类不同得方法,那么就需要在向上转型之后再向下转型.

再问: (接上面的) B类也有:publicint m = 2; view()方法同样覆盖父类的,方法块是这样的:System.out.println(this.m); System.out.println(super.m); System.out.println(this.getClass()); 如果执行: B b = new B(); b.view(); 结果为:2 1 class B(中间换行) 如果把B中的方法注释掉,结果为:1 class B(中间换行) 发现,是不是执行父类的方法,都会去引用父类的成员变量? 不懂里面的变量是怎样的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值