关于Java抽象类的一些小tips。
考虑Java里常见的一种多态写法:Parent p = new Child();即创建对象时类型为父类,实例化的却是子类。毋庸置疑,此时p只能调用Child类中Parent类含有的方法,Child类的扩展方法无法由p调用,类的公共字段也随变量的类型(即为Parent类里的变量)。但是如果Parent是一个含有抽象方法的抽象类时呢,那么p能不能调用Parent里的抽象方法呢?我自己写了一个代码测试了一下。
抽象类:
//电脑抽象类
public abstract class AbstractComputer {
public void computerInfo(){
System.out.println("This is a computer.");
}
//抽象方法
public abstract void function();
}
继承类Dell:
public class Dell extends AbstractComputer {
@Override
public void function() {
// TODO Auto-generated method stub
System.out.println("I am dell");
}
}
继承类MacBook:
public class MacBook extends AbstractComputer {
@Override
public void function() {
// TODO Auto-generated method stub
System.out.println("I am MacBook");
}
}
主类:
public class ComputerMain {
public static void main(String[] args) {
AbstractComputer dell = new Dell();
AbstractComputer macBook = new MacBook();
dell.function();
macBook.function();
}
}
//运行结果:
//I am dell
//I am MacBook
上述代码的结果表明,变量的类型是一个抽象类时,也是可以使用抽象类里的抽象方法的,此时抽象方法的调用依赖于具体的实例对象的类型。