黑马程序员技术交流社区
标题:
新手,对于Java继承有个疑问
[打印本页]
作者:
Oh_JAVA
时间:
2016-7-17 22:11
标题:
新手,对于Java继承有个疑问
本帖最后由 Oh_JAVA 于 2016-7-17 22:14 编辑
public class test {
public static void main(String[] args) {
new B().prin();
}
}
class A{
private int num = 3;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
class B extends A{
private int num=4;
public void prin() {
System.out.println(getNum());
}
}
复制代码
在代码中 B 继承了 A,继承这个概念只是形式上的(虚的),还是真的会继承到自己本身,如果是真的继承到本身,B类就相当于这样:
class B {
private int num=4;
public void prin() {
System.out.println(getNum());
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
复制代码
这样子 按道理应该输出 4,真实答案是输出 3,那这样子是虚的喽,虚实我不知道这样的理解是不是其实和继承不搭嘎
既然输出是3,那应该就只有产生两种方式了
1.就是像我上面第二段代码一样,真的继承下来了,调用自己的getNum(),但是java知道那个getNum()是父类继承下来的,所以num直接去父类里找了
2.就是第一段代码一样,虚的,直接去父类调用getNum(),找到num
上面两种方式应该是那种,还是其他的解释?
我不知道大家有没有弄懂我想表达的意思,也可能就是我脑子一根筋,想不明白吧~~
作者:
cat73
时间:
2016-7-17 22:18
本帖最后由 cat73 于 2016-7-17 22:20 编辑
感觉实际开发中变量覆盖的情况是很少出现的。。
JVM 会存储类本身以及每一个父类的方法,即使被覆盖了也会存储,以便通过 super.method() 的方式来调用。
其实就像 JavaScript 这种语言的话是真的会输出 4。。。
JavaScript 会遍历原型链并使用最先被找到的作为结果。。。
作者:
Oh_JAVA
时间:
2016-7-17 22:28
cat73 发表于 2016-7-17 22:18
感觉实际开发中变量覆盖的情况是很少出现的。。
JVM 会存储类本身以及每一个父类的方法,即使被覆盖了也会 ...
额。。我表达不清楚,我想说这个继承的正式原理是真的把那些继承下来了吗?继承不会继承private的,所以也不会覆盖,再看了一遍好像有点豁然了,好像不是真的继承,这个继承的真实是不是 在B类中的getNum() 实际上super.getNum(),只是省略了super关键字
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2