java中的上转型对象

如果父类和子类都有一样的成员变量和方法,建立一个上转型变量,对于变量,为何是默认访问父类的,对于方法,为何是默认访问子类的呢?似乎刚刚好说反了..... 如果父类和子类都有一样的成员变量和方法,建立一个上转型变量,对于变量,为何是默认访问父类的,对于方法,为何是默认访问子类的呢?
似乎刚刚好说反了..
展开
 我来答
百度网友5328131
2019-09-14
知道答主
回答量:1
采纳率:0%
帮助的人:707
展开全部
题主可能误会了其中的变量关系
上转型对象默认是使用父类中的成员和方法
只有当父类中的被重写后则使用子类中的成员变量或方法

A:
成员有int n和double m;
方法有f():打印子类继承
B:
成员有double n和double m;

B继承A
此时主类中申请一个上转型对象
A a = new B()
a.m是原父类中的
a.f()是原父类中的
而a.n由于被子类改写了
但是上转型对象依然可以操作被隐藏的成员
a.n还是自身原来的int类型的 可以赋个int值
附加:如果在B的类体中嵌一个新的方法cry()或者fly()时,上转型对象a是无法调用的,是哭不出来也飞不出来的

我们可以看出
1.上转型变量是有子类new出来的 父类引用的
2.它可以继续操作父类中的成员,即使它被子类重写过
3.它不可以操作子类新增的方法
总结就是上转型变量是以A为主体的
该继承的还是继承
该有的成员变量被重写还是继续使用自己原本的成员
唯一的就是不能操作子类里新增的量了
Mariahcat
推荐于2016-03-11
知道答主
回答量:12
采纳率:0%
帮助的人:14.6万
展开全部
发生向上转型时,编译器还是把父类的引用当做父类的对象,所以访问的是父类的属性(其实父类的引用只能访问自己的属性),但是子类覆写了父类的方法所以调用了子类的方法。至于为什么这样,我只能解释这正是多态性的表现。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式