问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java 父类 子类 引用 默认构造函数

发布网友 发布时间:2022-05-09 18:09

我来回答

5个回答

热心网友 时间:2023-10-11 23:48

我想LZ之所以对java的这种行为感到奇怪,是因为你把类里的属性和方法来做了对比吧。也就是子类(Y)同时覆盖了父类(X)的属性和方法时,为什么“X s = new Y(); ”这里的s只可以调用有Y中覆盖X的方法,而不能使用Y中覆盖X的属性。这也是疑惑的关键。

我先给出一个结论:父类引用指向子类对象时,父类与子类同名的属性和方法都会被覆盖。 (一般对属性的覆盖叫对属性的隐藏)

对于上面的结论我们来看你这个程序,既然属性可以被覆盖,那怎么s.i是用了父类的变量值呢?这是关系到了java处理属性和方法的不同机制引起的。

先再给出一个结论:java对方法的调用是采取动态绑定(运行时才判断)的方法,对属性的调用是采取静态绑定(编译时就判断)的方法。

对于上面的结论我们来理解你的程序“X s = new Y(); ”,这一句,也可说是父类引用指向子类对象,也可以说是子类对象向上转型为父类引用。那在s使用属性的时候是静态绑定的,它是在编译期就决定了这个属性是属于哪一个类的对象了,所以在上面那句中X s.也就是说X类中的属性是用s来调用的,s就不能调用Y类中的属性,因为它是静态绑定了。而s使用方法时是动态绑定的,所以s在调用方法的时候,java会去查看s这个时候的指向的对象是哪一个,是Y类对象就调用Y类的方法,是X类的对象就调用X类的方法。所以这里s是指向了Y类中的对象(“X s = new Y(); ”这句可知),则调用Y类中的方法。

好,上面对你的问题讲清了,下面再说说java因为什么对属性要采取静态的绑定方法。这是因为静态绑定是有很多的好处,它可以让我们在编译期就发现程序中的错误,而不是在运行期。这样就可以提高程序的运行效率!而对方法采取动态绑定是为了实现多态,知道java是的多态是java的一大特色。多态也是面向对象的关键技术之一,所以java是以效率为代价来实现多态这是很值得的

热心网友 时间:2023-10-11 23:48

父类引用指向子类对象,不能调用子类新定义的变量,方法,即使是同名也不会被覆盖.

热心网友 时间:2023-10-11 23:49

楼上说的不完全对;
父类引用指向子类对象,父类的同名变量不会被覆盖,但父类的同名方法会被覆盖。

热心网友 时间:2023-10-11 23:49

父类引用子类,不能调用子类自己的东西(意思父类没有的东西),包括新定义的方法和变量,但可以调用子类重写的方法。
Class Shape{
public void draw()
{
}
}
Class A1 extends Shape
{
public void draw()
{
}
}
Class A2 extends Shape
{
public void draw()
{
}
}

每种形状都可以画,如三角形,正方形等等,但每种形状的画法又不一样
有如下方法
public void drawShape(Shape shape)
{
shape.draw();
}
则该方法可以根据你实际传进来的对象调用相应的方法
比如:drawShape(new A1()),此时shape指向A1对象,则shape.draw()调用A1中的draw()
drawShape(new A2()),此时shape指向A2对象, 则shape.draw()调用A2中的draw()

如果A1 A2中没有重写draw(),都将调用Shape中的 draw()

热心网友 时间:2023-10-11 23:50

麻烦你去把多态搞清楚。
java最基本的东西。
这完全就是多态!
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
求大学生谈恋爱的各种弊端 大学生恋爱的利大于弊吗? 大学生谈恋爱的弊处 dnf现在站街16000的物攻 增加100物攻能张多少 家里养的蚕宝宝是要蜕皮了吗 富贵包硬和软的区别 【已完成】为什么腋窝突然有异味? 女生为什么有狐臭症状? 为什么会狐臭 万视宝这个牌子是做什么的?有人了解嘛? 颜值不够的男性朋友如何变帅? 身高不够颜值来凑颜值不够下一句 请教java有isNumber函数吗 java中基础函数问题 颜值不够下一句 颜值不够美颜来凑下一句 java 得有参函数和无参函数,定义给我说一下,最好仔细点 颜值不够,衣品来凑。好的着装品味,能为你加分多少? 颜值不够的下一句是什么 颜值不够是啥意思 新三星手机贴膜没有 三星w22售后免费贴膜吗 三星手机售后能贴膜吗 三星手机贴膜到那里贴膜最好?三星专卖店可以嘛! 三星手机贴膜好不好 大洋洲中位于北半球的国家有哪些? 南半球和北半球怎么划分的?? 股票盘整中突然出现向上跳空缺口第二个交易日缺口被回补,是好还是坏 北半球的国家有哪些 南半球和北半球都有那些国家? 颜值不够什么来凑幽默 娱乐圈中,是不是颜值不够,就别演绝色美人了? 我35了,女生,颜值不够找不到合适的对象怎么办?或者相亲了总是不被喜欢,很敷衍怎么办? java 自定义表单功能需要哪些技术 颜值不够,身材来凑,怎样运动才能让身材更好? 娱乐圈内有哪些颜值不够才艺来凑的女明星? 有没有谁用java系统里面使用Microsoft Office InfoPath设计表单的。 娱乐圈有哪些“颜值不够身高来凑”的艺人呢? 求助,有没有java的自定义表单引擎 颜值不够,智商凑,这句话到底管不管用 java web中做自定义报表怎么做 颜值不够、演技来凑,1980年的17个中戏学生,后来都成了什么了? java动态生成web表单页面 santak ups电源感叹号显示红色一直响怎么回事? 办公自动化系统使用表单自定义有哪些好处 Java自定义表模型中,如何获取单元格的行号和列号,自定义的其实现方法?谢谢! 在JAVA中如何将多个组件放到同一个容器中交替显示 santak牌ups电源一直吱吱响是怎么回事 山特ups电源旁路状态下可以充电吗 什么是山特ups电源并联冗余与串联冗余的比较