Java中的继承
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java中的继承,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1395字,纯文字阅读大概需要2分钟。
内容图文
我遇到了关于网络上遗传的这个例子,我对它的结果并不容易.我错过了一些关键的东西.
public class A {
int i = 5;
public A() {
foo();
}
private void foo() {
System.out.println(i);
}}
public class B extends A {
int i = 6;}
public class C extends B {
int i = 7;
public void foo() {
System.out.println("C's foo");
System.out.println(super.i);
}}
我试图通过以下命令弄清楚发生了什么:C c = new C();
的System.out.println(C.I.);
我知道当我们创建一个新的C实例时,我们接近A和B的构造,所以我们到达A() – (问题1)我(A)是否在路上初始化?
现在我们需要调用foo() – (问题2) – C的foo()是否考虑重写A的foo()?如果B有自己的foo()怎么办?然后它被认为是一个覆盖和C的foo()操作?
据我所知,当它与局部变量相关时没有覆盖.为什么System.out.println(c.i)是7而不是5?不应该是最高父亲的我吗?
编辑:我的问题不是关于当我使用c时将使用哪个foo和i,是关于在这两个特定命令期间发生的事情,显然导致A的foo被使用而不是C的.
非常感谢你.
解决方法:
这里的三个i变量是完全独立的.任何语句使用哪一个在编译时确定 – 不涉及多态.所以A.foo()将始终打印出在A中声明的变量的值.
请注意,顺便说一下这些不是局部变量 – 它们是实例变量.
当你打印出使用C语言中声明的变量的c.i时,因为c的编译时类型是C.如果你写的话可以看到:
C c = new C();
A a = c;
B b = c;
System.out.println(a.i); // 5 - variable declared in A
System.out.println(b.i); // 6 - variable declared in B
System.out.println(c.i); // 7 - variable declared in C
请注意,在编写良好的程序中,这种事情几乎不会导致问题,因为变量应该是私有的.
内容总结
以上是互联网集市为您收集整理的Java中的继承全部内容,希望文章能够帮你解决Java中的继承所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。