【问题标题】:superclass object or subclass object? why? [duplicate]超类对象还是子类对象?为什么? [复制]
【发布时间】:2018-12-16 03:31:14
【问题描述】:

我是一名 Java 初学者,我不明白何时应该创建超类或子类的实例。我正在网上学习一些教程,发现几次类似以下代码:

package test;

class ABC{
   public void myMethod(){
    System.out.println("Overridden Method");
   }
}
public class test extends ABC{

   @Override
   public void myMethod(){
    System.out.println("Overriding Method");
   }

   public static void main(String args[]){
    ABC obj = new test();
    obj.myMethod();
   }
}

为什么我应该使用ABC obj = new test(); 而不是test = new test();? 如果我需要一个新的 ABC 对象,使用ABC obj = new ABC(); 是否有意义?

谢谢你,很抱歉这个菜鸟问题。

【问题讨论】:

  • 我一直这样做。 List<Foo> myList = new ArrayList<>();。以后用什么样的列表对我来说并不重要。如果我发现LinkedList 会更好,那么很容易为我切换。我只需要改变一件事。而且我可以确定我的代码仍然可以像以前一样工作,因为我只使用List 接口,而ArrayListLinkedList 可能提供的没有什么特别之处。

标签: java class subclass superclass


【解决方案1】:

这里给你举个例子,说你的父类ABC有静态方法或者实例变量

class ABC{
int a;
static void display(){
 System.out.println("Parent ABC");
}

现在你有ABC abc = new test();。通过引用abc,您可以访问子类testpublic void myMethod() 和类ABC 的静态方法static void display()。此外,您可以使用类ABC 的实例变量a 和引用abc。 请记住静态方法、实例变量、静态变量总是在引用类型上调用(在这种情况下,类型是ABC)。然而,实例方法总是在我们引用的对象类型上调用(在这种情况下,我们引用test类对象)。

【讨论】:

    【解决方案2】:

    当一个类被另一个类扩展时,它成为父类(扩展类)的子类。

    父引用可以包含一个子引用,而子引用始终可以包含它自身的一个实例。

    test t = new test();
    ABC abc = new test();
    

    都有效。而对于为什么的问题,克服某些情况可能会派上用场。

    阅读有关面向对象编程中多态性概念的更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-07
      • 1970-01-01
      • 2021-12-12
      相关资源
      最近更新 更多