我在教科书中读到标记为私有的类成员不会被继承。
所以我想如果课程A
有一个private
变量x
而课程B
会扩展课程A
那么就不会有变量x
班B
。
然而,以下示例表明我误解了:
public class testdrive
{
public static void main(String[] args) {
B b = new B();
b.setLength(32);
System.out.print(b.getLength());
}
}
class A {
private int length;
public void setLength(int len) {
length = len;
}
public int getLength() {
return length;
}
}
class B extends A {
public void dummy() {
}
}
结果是32,我感到困惑,因为它看起来像是参考b
的对象现在有变量length
,它的值是32.但参考{{1引用从类b
创建的对象,其中未定义B
变量。
那么真相是什么,班级length
是否会继承B
变量private
?如果是这样,length
变量不会被继承是什么意思?
答案 0 :(得分:3)
private
字段隐藏在B
中。但是,您的public
方法是继承的并且可以访问,并且可以访问私有字段。
答案 1 :(得分:2)
嘿,这不是你的想法,私人领域只能通过同一个类中存在的方法访问(给出的方法可以从其他类访问)
不是你可以直接打电话:
b.length=8;
或者你甚至不能这样做:(写下你为B创建对象的地方)
A a = new A();
a.length=8;
这两种方法都无效!
欲了解更多信息:
你甚至不需要从A扩展B,只需在main中创建一个A对象并使用你的get和set方法,它也会起作用!
答案 2 :(得分:-1)
您无法直接访问超类的私有字段和方法,但您可以通过使用其他公共方法来访问它们。
这是面向对象编程的基本概念之一,它被命名为 Encapsulation 。 请在此处详细了解:TutorialsPoint。
底线 :您无法直接访问此类私人字段或方法
b.length = 32;
也不喜欢(对于超类)
A a = new A();
a.length = 32;
但你可以通过使用像你的例子中的公共方法来操纵这些字段。
原因很简单:您的隐私字段/方法隐藏其他类除了持有它们的类,但您的<强>公共字段/方法不会被隐藏。