如果实现接口并创建实例,则实例变量的类型为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();
}
}