java-为什么无法使用父引用访问子字段
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-为什么无法使用父引用访问子字段,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1023字,纯文字阅读大概需要2分钟。
内容图文
![java-为什么无法使用父引用访问子字段](/upload/InfoBanner/zyjiaocheng/692/20be8a1d066b47d0b2cae1d0a54ed4f6.jpg)
class A {
int super_var = 1;
}
class B extends A {
int sub_var = 2;
}
public class Demo{
public static void main(String []args){
A a = new B();
System.out.print(a.sub_var); //compile error
}
}
为什么这会以编译错误结尾?引用(a)引用B的一个对象,它具有sub_var,为什么要限制它?为什么引用(a)只能访问A中的字段?
解决方法:
假设您有以下课程:
public class Animal() {
// ...
}
public class Fish extends Animal() {
public void swim() {...}
}
如果您声明了动物:
Animal x = new Fish();
然后您调用了swim()方法
x.swim();
您希望它能正常工作吗?我不这么认为,因为并非每只动物都能游泳.这就是为什么您必须明确指定动物x是Fish的原因:
((Fish) x).swim();
对于您的情况,如果要调用该方法,则应指定(技术上称为cast)类型:
System.out.print(((B)a).sub_var);
注意:
>方法和变量的工作原理相似.我在示例中使用了一种方法,因为它更具说明性.
编辑:
让我们看这个例子:
Animal x;
if (some_condition)
x = new Fish();
else
x = new Cat();
x.swim();
之所以存在此限制,是因为Java在执行时不知道分配给x的对象是否具有方法swim().因此,为避免这种情况,您必须转换为相应的类型以调用超类中不存在的方法.
内容总结
以上是互联网集市为您收集整理的java-为什么无法使用父引用访问子字段全部内容,希望文章能够帮你解决java-为什么无法使用父引用访问子字段所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。