接口类似于抽象类,都是抽象的,但它并不是类。接口用interface
修饰,格式是interface 接口名{}
。接口是抽象方法的集合,也就是说,接口内部只能是没有方法体的抽象方法。接口存在的意义就是给另一个类实现的。如果一个类实现了接口,那么就需要继承这个接口中所有的抽象方法。
因为Java中只能单继承。虽然c++支持多继承,但是Java设计师为了减少不必要的麻烦,就摒弃了多继承。因为多继承中的多个父类若有同名的方法时,就不知道调用的方法是谁的了。比如动物类里有一个run方法,猫科动物类也有一个run方法,tiger同时继承了猫科动物类和动物类,那么我们就会搞混,分不清super.run是谁的run方法。
public class Animal {
public void run(){
System.out.println("动物奔跑");
}
}
public class Cat_Animal {
public void run(){
System.out.println("猫科动物奔跑");
}
}
public class Tiger extends Animal,Cat_Animal {//直接编译报错,只支持单继承
@Override
public void run() {
super.run();
}
}
虽然Java中不支持多继承,但并不代表我们没有这个需求。为了实现需求、且要减少麻烦,于是就有了接口。接口是支持多继承的,但为了与类作区分,所以我们通常说成“多实现(implements)”
public interface Animal {
void run();
}
public interface Cat_Animal {
void run();
}
public class Tiger implements Animal,Cat_Animal {//多实现用implements修饰,接口名用逗号隔开
@Override
public void run() {
System.out.println("老虎奔跑");
}
}
public class Test {
public static void main(String[] args) {
Tiger tiger = new Tiger();
tiger.run();
}
}
老虎奔跑
public abstract
,但我们可以不用写,直接写出返回值类型 方法名();
即可,因为public abstract
会被自动省略。除非实现了接口的类是抽象的,否则接口中的所有方法都要在类中实现。如果实现接口的类是抽象类,则没必要全部实现。int a = 5;
,String name = "张三";
之类的“变量”,但这些都是伪装。因为前面默认的public static final
被省略了。public interface BigCat extends Animal, Cat_Animal{}
,extends后的接口名用逗号隔开。implements
关键字要放在extend
后面public interface Demo extends Animal,BigCat,Cat_Animal{}
abstract class
关键字标识。原文:https://www.cnblogs.com/anycall/p/10770687.html