基本Java问题

基本Java问题,java,Java,嗨,伙计们,请你们再回答一个问题好吗?非常感谢 问题1。假设我初始化了一个“类A”对象数组,我是否也可以将类B对象(类A的子类)放在同一个数组中。或者我是否必须将对象B的引用类型向上转换为类A引用类型 我可以在子类中将公共方法重新定义为私有方法吗 问题3.所以我明白,如果我想访问我的超类的私有实例变量,我需要使用它的访问器方法。这有点令人恼火,因为它不符合生物继承。为什么会这样?为什么我们不能把它的超类的私有实例变量或私有方法当作它自己的实例处理e变量(什么样的生物遗传承诺) 非常感谢! 问候约

嗨,伙计们,请你们再回答一个问题好吗?非常感谢

问题1。假设我初始化了一个“类A”对象数组,我是否也可以将类B对象(类A的子类)放在同一个数组中。或者我是否必须将对象B的引用类型向上转换为类A引用类型

我可以在子类中将公共方法重新定义为私有方法吗

问题3.所以我明白,如果我想访问我的超类的私有实例变量,我需要使用它的访问器方法。这有点令人恼火,因为它不符合生物继承。为什么会这样?为什么我们不能把它的超类的私有实例变量或私有方法当作它自己的实例处理e变量(什么样的生物遗传承诺)

非常感谢!
问候约翰。

Q1。是的,不需要向上投射。
问题2.否
问题3.使用受保护的
而不是私有的

  • 问题1:您不需要使用explicite
  • 问题2:没有
  • Q3:因为private的设计目标是这个字段是私有的。-这是因为程序员完全控制这个字段,并且不需要注意任何子类,这些子类做了一些不打算用于这个字段的事情。-这是面向对象的核心概念,称为对象隐藏/封装

  • Q1:您也可以将B类对象放入该数组中:

    private static class A { ...}
    
    private static class B extends A { ...}
    
    A[] arr = new A[] { new A(), new B() }; // works fine
    
    问题2:没有


    问题3:使用
    protected
    而不是
    private

    A1:是的。您可以将子类添加到超类数组中。(例如,您可以在“Animal”数组中添加“Dog”)。基本要求此数组中的所有元素都应该是Animal(is relationship)

    A2:不可以。您可以在子类中加宽方法的访问修饰符,但不能缩小。 考虑这种情况:

    Animal a = new Dog();
    a.eat();
    
    eat
    方法在Dog类中被设为私有,它将导致RunTimeException(这就是为什么编译器不允许您将此方法声明为私有)


    A3:如果您想使用超类的属性,请将其设置为受保护的。简单!每个修饰符都有其自身的重要性。

    答案1:您可以始终在超类的引用中放置子类的对象,即
    A[]=new A[2];A[0]=new B();如果B是类A的子类,则设置为

    回答2:不,你不能


    回答3:在生物继承中,也不是所有的东西都继承给子类…

    Q1。是的。父类引用变量可以保存子类对象

    问题2.否。您不能降低父类方法的可见性

    私有成员只能由基类访问。

    1)是的,您可以将子类添加到超类数组中,但不需要强制转换 2) 不,你不能
    3) 使用protected而不是private

    为什么不自己尝试一下呢?正如@Thomas所说,你可以通过自己尝试了解更多。你应该提出三个不同的问题。你会得到更好的回答-请分开。编程继承并不等同于生物继承。不要试图过度扩展有用的简单类比重新阅读并尝试理解课本中的相关页面。编辑了一个打字错误,将
    Q2
    改为
    Q3