基本的Java问题

时间:2011-05-02 11:36:15

标签: java

嗨,伙计们,请你能够回答这些问题中的一个以上吗?非常感谢!

Q1。让我说我初始化一个“A类”对象数组“,我是否也可以将B类对象(A类的子类)放在同一个数组中。或者我必须将对象B的引用类型转换为A类参考类型?

问题2.我可以将公共方法重新定义为子类中的私有方法吗?

Q3。据我所知,如果我想访问我的超类私有实例变量,我需要使用它的访问器方法。这有点刺激,因为它不符合生物遗传。为什么会这样?为什么我们不能仅仅处理其超类的私有实例变量或私有方法,就像它自己的实例变量(生物继承承诺的那样)?

非常感谢! 关心约翰。

7 个答案:

答案 0 :(得分:5)

Q1。是的,不需要上传 Q2。没有
Q3。使用protected代替private

答案 1 :(得分:3)

  • Q1:你不需要演绎explicite
  • Q2:没有
  • 问题3:因为私人的设计目标是这个领域是私人的。 - 这是因为程序员完全控制了这个字段,并且不需要关注任何不属于这个字段的子类。 - 这是面向对象的核心概念,称为对象隐藏/封装。

答案 2 :(得分:3)

A1:是的。您可以将子类添加到超类Array。 (例如,您可以在“Animal”数组中添加“Dog”)。基本是这个数组中的所有元素都应该是Animal(IS关系)

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