接口中没有构造方法,那么为什么要通过多态的形式把接口实例化呢?实例化的过程是如何的呢?
以下内容为个人理解,如有不妥,请评论探讨.
把接口通过多态实例化是为了规避接口中一些我们没有的方法,比如跳高接口中,有跳高的抽象方法,在实现跳高接口的狗类中,我们需要重写接口中的所有方法,但是在实现类(狗类)中还有接口中没有的方法,(比如看家 ,吃饭等方法)
//跳高的接口
public interface Jump {
public abstract void jump();
// public abstract void run();
}
//实现类
public class Dog extends Animal implements Jump{
public Dog() {
}
public Dog(String name, int age) {
super(name, age);
}
@Override
public void eat() {
System.out.println("狗恰肉");
}
@Override
public void jump() {
System.out.println("狗学会了跳高");
}
}
在创建跳高接口引用指向狗类对象的过程中,实际上创建的还是狗对象,这也就解释了接口中没有构造方法为什么还能被实例化,把创建的狗类对象伪装成接口类的对象,在调用实现类(狗类)中的方法的时候,如果接口中没有该方法,那么该方法就不能使用(多态的特征)
//测试类
public class Test {
public static void main(String[] args) {
Jump j = new Dog();
j.jump();
}
}
也就是说,接口的多态,可以理解成一种规范,多态产生的对象只能使用重写的接口中的方法(当然在实际的开发中可能用到的不多);
ps:
使用接口可以理解成对类中功能的一些拓展,比如狗类中,跳高这个功能不是所有狗都会的,只有实现了该接口才会有这个功能,(通俗的说就是学会了跳高的狗)
抽象可以理解为一些共性的功能,比如动物类,所有动物都会吃,所以吃可以定为一种抽象方法,动物类为抽象类,当狗类或者其他动物继承了这个类,就会重写一些共有功能的抽象的方法,比如狗吃狗粮等.