Java的接口可以实例化吗?
接口不可以实例化。但是接口对象可以指向它的实现类对象。
接口可以看做特殊的抽象类,只是所有的方法都是抽象方法(没有实现的方法),接口的方法都是默认public abstract的,
所以不能被实例化。
比如:
List Set Map都是接口
使用时先实现
List list = new ArrayList <>();
有点类似于指针的感觉了.Factory接口可以用来代表实现它的类。比如:
public interface thing;
公众课堂水果实施的东西;
thing something = new fruit();
这个东西指的就是水果。
接口编程是为了实现多继承。
,
以下转自:HTTP://www.runoob.com/java/java-polymorphism.html
声明一个接口的变量(接口的引用)可以指向一个实现类(实现该接口的类)的实例,
但是该接口的变量不能使用实现类中有,接口中没有的方法(实现类中没有重写的方法,自添加的方法),比如:
public class InterfaceCat {
public static void main(String [] args){
show(new Cat()); //以猫对象调用show方法
show(new Dog()); //以狗对象调用show方法
Animal a = new Cat(); //向上转型
// a.eat(); //调用的是猫的吃
//猫c =(猫)a; //向下转型
// c.work(); //调用的是Cat的catchMouse
a.work(); //该处编译报错
}
public static void show(Animal a){
a.eat();
//类型判断
if(一个Cat的实例){//猫做的事情
Cat c =(Cat)a;
c.work();
} else if(一个Dog的实例){//狗做的事情
Dog c =(Dog)a;
c.work();
}
}
}
抽象类Animal {
abstract void eat();
//抽象void work(); //抽象类(接口)中没有工作方法
}
class Cat extends Animal {
public void eat(){
System.out.println(“吃鱼”);
}
public void work(){
System.out.println(“抓老鼠”);
}
}
class Dog extends Animal {
public void eat(){
System.out.println(“吃骨头”);
}
public void work(){
System.out.println(“看家”);
}
}
输出结果为:
吃鱼
抓老鼠
吃骨头
看家
吃鱼
抓老鼠
对于多态,可以总结以下几点:
一,使用父类类型的引用指向子类的对象;
二,该引用只能调用父类中定义的方法和变量;
三,如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接,动态调用);
四,变量不能被重写(覆盖), “重写” 的概念只针对方法,如果在子类中 “重写” 了父类中的变量,那么在编译时会报错。