继承的问题

做多做少不如做好 2019-11-19 01:09:49

public class A {
private int a=11;
private int b=22;
public void method() {
System.out.println(a);
}
}

public class B extends A{
private int a=5;
private int b=4;
// public void method() {
// System.out.println(a);
// }
}

public class Test1 {
public static void main(String[] args) {
B b=new B();
b.method();
}
}

为什么结果是11,B类注释掉的还原后结果变为了5。不知道为什么,所以继承不是代码的复制?那是什么
...全文
66 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Z113014 2019-12-13
  • 打赏
  • 举报
回复
子类重写父类的方法,创建的B类对象调用的就是B类重写之后的方法,注释之后调用时B类中没有Mthod方法,默认调用父类的
KeepSayingNo 2019-11-19
  • 打赏
  • 举报
回复
继承就是子类如果重写了父类的方法,则子类生成的对象就调自己的方法,否则就调父类的方法
maradona1984 2019-11-19
  • 打赏
  • 举报
回复
https://www.jianshu.com/p/4997c338d60e?1490580924986 成员变量不能被重写
树成 2019-11-19
  • 打赏
  • 举报
回复
继承不是代码复制。如果B继承A,它们同时有一个名称和参数相同的method方法,那么其实是存在两个方法的。 继承中的方法重写是一种调用上的访问覆盖,而不是物理代码上的覆盖或黏贴。 这个例子中,如果你创建一个B的对象b,调用method方法,那么JAVA的执行引擎会去方发表中查找当前对象所属的类B中有没有method方法,如果有调用,如果没有则查找它的父类A中,直到继承树的最顶端java.lang.Object类中有没有同名同参数的方法。如果都没有,那么抛出异常。 从java的运行时机制上来看,方法不存在继承特性,它创建一刻开始,它就属于类,从逻辑上来说,你可以把所有方法看为static修饰的,static的方法与普通方法的差别只是有没有this这个东西,所以所有的普通方法都可以认为是method(this,...)方法,既是有低0号参数,它名字叫this。 java的属性在继承机制上不同于方法,java生成对象以后,会把当前类和及其所有父类的属性都初始化到当前对象中,所以对于属性,在对象生成以后,所有属性都会在当前对象中,只是存在访问限制(这是编译器与java安全沙箱给与的访问阻碍,这种阻碍使用反射可以打破)。
  • 打赏
  • 举报
回复
重写?这两个method不是一样的吗,这个method是复制粘贴的
imiMi_ 2019-11-19
  • 打赏
  • 举报
回复
第一个11是因为调用的是A的方法,输出了A中a的值。第二个是5是B中重写了A的method方法,输出的就是B中a的值了
qq_39936465 2019-11-19
  • 打赏
  • 举报
回复
引用 楼主 一方 通行 的回复:
为什么结果是11,B类注释掉的还原后结果变为了5。不知道为什么,所以继承不是代码的复制?那是什么
变量a为私有,不会被重新赋予。都是用的自己的私有变量。

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧