为了账号安全,请及时绑定邮箱和手机立即绑定

java,麻烦详细解释下怎么继承的?为什么是‘ Parent Child’

java,麻烦详细解释下怎么继承的?为什么是‘ Parent Child’

万千封印 2019-03-13 18:19:04
public class Test {public static void main(String[] args) {Parent p = new Child();System.out.println(p.name);System.out.println(p.get());}}class Parent { String name = "Parent";public String get() {return name;}}class Child extends Parent {String name = "Child";public String get() {return name;}}
查看完整描述

3 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

这是一个java中成员变量的scope问题。
1.父类中非私有变量可以被子类直接继承和访问。需要用super.filed;
2.父类中的私有变量可以可以通过set和get方法,向外提供访问接口。
3.成员变量只能被继承,不能被重写。不构成多态。只有方法才有多态行。
4.父类和子类中的成员变量命名相同是可以的。在代码中表面上看到,
该类有两个相同的变量,父类中有一个,子类中有一个。实际上,在内存中他们
具有不同存储标识。不同的地址,是不同的对象实例。

总结:一个类的变量属于该类所有。非私有的变量可以被子类继承。子类访问父类
的变量需要通过父类的访问接口。变量不存在多态。


查看完整回答
反对 回复 2019-04-26
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

虽然子类重写了父类的属性和方法
但是父类引用不可以调用子类特有的方法和属性
但是可以调用从父类继承的方法

成员方法的调用按照对象的类型,无论用什么类型(父类还是本身),其调用的都是具体对象所在类中定义的方法

所以p.name还是父类的属性,而p.get()是子类的方法


查看完整回答
反对 回复 2019-04-26
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

上面说的有点深奥啊 哈哈
我就你的问题和你说下

你定义了parent类作为父类
你有定义了child类作为子类

以上就是继承关系,很正确

至于你说的,“为什么是‘ Parent Child’ ,而不是 ‘Parent Parent’????”

这个大多java开发人员经常犯的小毛病,大多人都会认为
“子类会覆盖父类的属性,并且初始化子类后,通过父类调用该属性和子类调用该属性的值应该相同。”

其实内在的是这样的:
"基类与子类中声明了一个相同名称的属性,基类和子类都可以分别管理自己的属性,且属性值不会被覆盖,即使基类与子类中声明了一个相同名称的静态变量,静态变量的值也不会覆盖。"
Thinking in Java 经典话语
哈哈


查看完整回答
反对 回复 2019-04-26
  • 3 回答
  • 0 关注
  • 897 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号