首页 / JAVA / java – 子类没有看到父变量
java – 子类没有看到父变量
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 子类没有看到父变量,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1322字,纯文字阅读大概需要2分钟。
内容图文
![java – 子类没有看到父变量](/upload/InfoBanner/zyjiaocheng/793/96374f67050847918faa2c32b1ce4ec5.jpg)
public class Program {
public static void main(String[] args) {
Listener listener = new Listener();
listener.listen();
}
}
public class Listener {
ServerQuery query;
int test = 1;
public listen() {
query = new ServerQuery();
Channel ch = new Channel();
ch.dupa();
}
}
public class Channel extends Listener {
public dupa() {
System.out.print(test); // works fine
super.query.doSomething(); // null pointer
query.doSomething(); // null pointer
}
}
我无法访问类“Channel”中的变量“query”.
谁能解释我为什么?
解决方法:
你误解了超类型和子类型的概念.
直接问题是您需要在使用之前实例化查询变量.
在调用dupa之前调用ch.listen()或在dupa中调用它.
这里的主要问题是理解子类型 – 超类型关系.
您的Channel对象没有对Listener实例的引用,它只是它的子类型.
因此,如果您需要访问超类型的字段,例如访问类的字段 – 您必须在使用它之前对其进行实例化.
在Listener中创建Channel对象没有逻辑. Channel是一个Listener,因此您可以创建它.
我建议你阅读更多关于here或其他任何地方的信息.
对于您的代码,您可以使用:
public class Program {
public static void main(String[] args) {
Channel ch = new Channel();
ch.listen(); // will instantiate ch.query
ch.dupa();
}
}
public class Listener {
ServerQuery query;
int test = 1;
public listen() {
query = new ServerQuery();
}
}
public class Channel extends Listener {
public dupa() {
System.out.print(test);
super.query.doSomething();
query.doSomething();
}
}
内容总结
以上是互联网集市为您收集整理的java – 子类没有看到父变量全部内容,希望文章能够帮你解决java – 子类没有看到父变量所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。