嗨,伙计们,请你能够回答这些问题中的一个以上吗?非常感谢!
Q1。让我说我初始化一个“A类”对象数组“,我是否也可以将B类对象(A类的子类)放在同一个数组中。或者我必须将对象B的引用类型转换为A类参考类型?
问题2.我可以将公共方法重新定义为子类中的私有方法吗?
Q3。据我所知,如果我想访问我的超类私有实例变量,我需要使用它的访问器方法。这有点刺激,因为它不符合生物遗传。为什么会这样?为什么我们不能仅仅处理其超类的私有实例变量或私有方法,就像它自己的实例变量(生物继承承诺的那样)?
非常感谢! 关心约翰。
答案 0 :(得分:5)
Q1。是的,不需要上传
Q2。没有
Q3。使用protected
代替private
。
答案 1 :(得分:3)
答案 2 :(得分:3)
A2:不可以。您可以在子类中扩展方法的访问修饰符,但不能缩小范围。 考虑这种情况:
Animal a = new Dog();
a.eat();
如果{class}}方法在Dog类中变为私有,则会导致RunTimeException。 (这就是为什么编译器不允许你将这个方法声明为私有的)
A3:如果你想使用超类的属性,请将其设为eat
..简单!每个修饰符都有其重要性。
答案 3 :(得分:1)
Q1:你也可以把B类对象放在那个数组中:
private static class A { ...}
private static class B extends A { ...}
A[] arr = new A[] { new A(), new B() }; // works fine
Q2:没有
问题3:使用protected
代替private
。
答案 4 :(得分:1)
答案1:如果B是A类的子类,你总是可以将子类的对象放在超类的引用中,即A a[] = new A[2]; a[0] = new B();
。
答案2:不,你不能......
答案3:在生物遗传中,并非一切都是遗传给孩子......
答案 5 :(得分:0)
Q1。是。父类引用变量可以保存子类对象。
Q2。不可以。您无法降低父类方法的可见性。
Q3。私有成员只能通过基类访问。
答案 6 :(得分:0)
1)是的,您可以将子类添加到超类数组中但不需要进行强制转换 2)不,你不能 3)使用protected而不是private