继承问题java
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了继承问题java相关的知识,希望对你有一定的参考价值。
class first
public first()amethod();
public void amethod()System.out.println("first");
public class term extends first
public term()amethod();
public void amethod()System.out.println("second");
public static void main(String ...args)
new term();
new first();
这段代码的输出结果second second first,
为什么前面有两个second?即使构造函数先调用父类,为什么是second呢?父类的amethod究竟有没有被改写?
因为new term();会调用term类的构造方法,而term类的构造方法里默认会先调用父类first的构造方法,在调用的是父类的构造方法时,会执行amethod();方法,但是虚拟机检查到amethod()方法被子类覆盖了,所以会调用子类的amethod()方法,然后再执行子类的构造方法里的amethod()方法,所以会打印两个second,这是多态的问题,动态绑定 参考技术A 这是一个多态的问题,子类的对象只能直接调用被覆盖的方法。
继承 Java 私有成员
【中文标题】继承 Java 私有成员【英文标题】:Inheritance Java private members 【发布时间】:2018-05-11 19:52:31 【问题描述】:我一直在经历java中的继承。我的问题是,如果私有成员没有被继承,它们怎么会在内存中结束。是否在内部发生了一些事情来解决这个问题,或者它们只是隐藏/无法访问,没有父类的公共成员函数。
这里是 java 文档 "子类不继承其父类的私有成员。但是,如果超类具有访问其私有字段的公共或受保护方法,则子类也可以使用这些方法。
嵌套类可以访问其封闭类的所有私有成员——包括字段和方法。因此,子类继承的公共或受保护的嵌套类可以间接访问超类的所有私有成员。”
【问题讨论】:
【参考方案1】:您的对象中有 Class
引用。您的对象的 Class
中有父 Class
引用。这就是私有方法仍在内存中的原因——它们被父类引用。
它们通常无法访问,您可以使用例如Method.setAccessible()
。您可以通过对父 Class
的反射获得 Method
。
【讨论】:
即使我得出结论,但“不继承私有成员”对我来说似乎是错误的。【参考方案2】:它们在内存中,但您没有访问权。
例子:
class A
private int foo;
public int getFoo( ) return foo;
...
class B extends A
...
实际上,B 类的每个实例都包含一个整数foo
。
但是,您不能直接访问它,因为它被声明为private
。您可以通过getFoo
方法间接访问它,因为那个是public
。
【讨论】:
A 类 private int foo; A( ) 打印 foo; ... class B extends A ... 即使这两个成员都没有被继承,也会打印 foo 的值。以上是关于继承问题java的主要内容,如果未能解决你的问题,请参考以下文章