java中的上转型对象
如果父类和子类都有一样的成员变量和方法,建立一个上转型变量,对于变量,为何是默认访问父类的,对于方法,为何是默认访问子类的呢?似乎刚刚好说反了.....
如果父类和子类都有一样的成员变量和方法,建立一个上转型变量,对于变量,为何是默认访问父类的,对于方法,为何是默认访问子类的呢?
似乎刚刚好说反了.. 展开
似乎刚刚好说反了.. 展开
2个回答
展开全部
题主可能误会了其中的变量关系
上转型对象默认是使用父类中的成员和方法
只有当父类中的被重写后则使用子类中的成员变量或方法
如
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为主体的
该继承的还是继承
该有的成员变量被重写还是继续使用自己原本的成员
唯一的就是不能操作子类里新增的量了
上转型对象默认是使用父类中的成员和方法
只有当父类中的被重写后则使用子类中的成员变量或方法
如
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为主体的
该继承的还是继承
该有的成员变量被重写还是继续使用自己原本的成员
唯一的就是不能操作子类里新增的量了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询