实例类型var。当创建子类的实例时,它扩展了抽象类

时间:2018-03-19 22:33:31

标签: java abstract-class

如果实现接口并创建实例,则实例变量的类型为USUALLY接口名称。这意味着

public interface MyIntefrace {
     void method();
}
public class MyClass implements MyInterface {
     void method() { System.out.println(); }
}

public class MyTest {
    public static void main(String[] args) {
        // 1) usually the type of instance var is MyInterface  
        MyInterface instance = new MyClass();    
        instance.method();

        // 2) you can use MyClass for instance var type though
        // but usually 1) is preferred in interface case
        MyClass instance2 = new MyClass(); 
    }  
}

但抽象类怎么样?实例变量类型可以是抽象类,也可以是其子类。

想知道下面的代码中哪一个是首选,3)或4)?

或者是否有任何规则在抽象类案例中只使用其中任何一个?

当我需要使用3)或4)时,有哪种情况?

public abstract class MyAbstract {
  abstract void method();
  void method2() {
    System.out.println();
  }
}

public class MyClass extends MyAbstract {

  void method() {
    System.out.println("abstract method");
  }

  @Override
  void method2() {
    System.out.println("method");
  }

  public static void main(String[] args) {
    // 3) 
    MyAbstract instance = new MyClass();
    instance.method();
    instance.method2();

    // 4)
    MyClass instance2 = new MyClass();
    instance2.method();
    instance2.method2();
  }
}

0 个答案:

没有答案