这是一个有趣的代码片段:
public class Superclass {
public static void main (String[] args){
Superclass obj = new Subclass();
obj.doSomething(); #prints "from Superclass"
}
private void doSomething(){System.out.println("from Superclass");}
}
class Subclass extends Superclass {
private void doSomething(){System.out.println("from Subclass");}
}
我知道子类不会继承其父级的私有成员,但是obj设法在其中调用它不应具有的访问权的方法。在编译时,obj是Superclass类型,在运行时是Subclass类型。
这可能与以下事实有关:对doSomething()的调用发生在驱动程序类内部,而该驱动程序类恰好是其自己的类(以及为什么可以首先调用doSomething()的原因)。
因此问题归结为,obj如何访问其父级的私有成员?
您自己回答了。由于私有方法未继承,因此超类引用将调用其自己的私有方法。
问题内容: 我对在继承中使用私有方法感到困惑,例如: 基于上面的代码,我感到困惑的私有方法的继承,是继承了私有方法来?还是两个类中的say方法完全无关?由于代码在main()方法中运行时出错,因此似乎无法从中调用私有方法。 问题答案: 如果您想让子类访问需要保留的超类方法,那么您正在寻找的关键字。 只允许包含该成员的类访问该成员。 允许在类及其所有子类中访问成员。 允许任何人访问该成员。
FAQs in section [24]: [24.1] 如何表示“私有继承”? [24.2] 私有继承和组合(composition)有什么类似? [24.3] 我应该选谁:组合还是私有继承? [24.4] 从私有继承类到父类需要指针类型转换吗? [24.5] 保护继承和私有继承的关系是什么? [24.6] 私有继承和保护继承的访问规则是什么? 24.1 如何表示“私有继承”? 用 : priv
我想用PHP在我的简单ORM中实现一个钩子系统: 这会导致一个致命错误: 致命错误:调用私人方法付款::before_save()从上下文'记录'中 有道理。 我可以将范围更改为public,但这似乎很难看:在保存()之前,除了支付之外,没有人与
问题内容: 有人告诉我,对于Java子类,它可以继承其超类的所有成员。那么这是否意味着甚至私人成员?我知道它可以继承受保护的成员。 谁可以给我解释一下这个。我现在很困惑。 问题答案: 不,私有成员 不会被继承, 因为私有成员的范围 仅限 于定义它的类。仅公共成员和受保护成员被继承。 从, 超类私人成员 子类 不继承 其父类 的私有成员 。但是,如果超类具有用于访问其私有字段的公共或受保护的方法,则
本文向大家介绍C++ 中私有继承的作用,包括了C++ 中私有继承的作用的使用技巧和注意事项,需要的朋友参考一下 C++ 中私有继承的作用 私有继承的 第一个规则:和公有继承相反,如果两个类之间的继承关系为私有,编译器一般不会将派生类对象转换成基类对象。 第二个规则: 从私有基类继承而来的成员都成为了派生类的私有成员,即使它们在基类中是保护或公有成员。 私有继承的含义:私有继承意味着 "用...来实
如果继承了方法,并且它需要一些私有变量,那么这也必须在中提供,因为我现在正在中调用? 编辑:对于那些说将调用父类方法的人,我发现只有创建的对象,而没有单独的对象一个用于子类,一个用于父类。这里