class InterfaceDemo2{
public static void main(String[] args){
Jing8 jing8=new Jing8;
jing8.shout();
Eater e1=new Eater();
e1.eat(jing8); //传入的jing8必须是Eatable的对象,所以类Jing8必须实现Eatable接口
RichMan r1=new RichMan();
r1.meng(jing8); //传入的jing8必须是Pet的对象,所以类Jing8必须实现Pet接口
}
}
abstract class Animal{
public abstract void shout(); //抽象方法的方法体只有分号
}
class Dog extends Animal{
void shout(){
System.out.println("汪汪!");
}
}
class Jing8 extends Dog implements Eatable,Pet{ //类Jing8实现Eatable和Pet接口
public void eat(){
System.out.println("味道很好!");
}
public void meng(){
System.out.println("很萌!");
}
}
interface Eatable{ //定义Eatable接口
public void eat();
}
class Eater{
public void eat(Eatable e){ //这里注意传入的参数类型是Eatable
System.out.println("食物就绪了!") ;
}
e.eat(); //调用接口中的eat()方法,此方法在类的实现中重写
}
interface Pet{ //定义Pet接口
public void meng();
}
class RichMan{
public void feed(Pet p){ //这里注意传入的参数类型是Pet
p.meng(); //调用接口中的meng()方法,此方法在类的实现中重写
}
}
输出结果:汪汪!
食物就绪了!
味道很好!
很萌!
总结接口与抽象类的异同:
共性:都是不断抽取出来的抽象的概念。
区别:1、抽象类体现继承关系,一个类只能单继承;而接口体现实现关系,一个类可以多实现。
2、抽象类是继承,是“is a”关系;接口是实现,是“like a”关系。
3、抽象类中可以定义非抽象方法,供子类直接使用;接口中的方法都是抽象方法,接口中的成员都有固定修饰符。