关于抽象类和接口的简单理解
//抽象类或方法的特征:用abstract修饰、无方法体 abstract class Animal{ abstract void shout();//抽象类、抽象方法存在的意义:例如动物的叫声各种各样,我也说不准,但可以先说明这是动物的叫声 } class Dog extends Animal{ void shout(){ System.out.println("Wang wang……");//被继承后,现在实现抽象类,动物的叫声就是Wang wang…… } } public class Example17{ public static void main(String[] args){ Dog dog =new Dog(); dog.shout();//调用的是实现类中的方法 } } //注意:如果用用抽象方法,那类必须是抽象类。但允许抽象类中,不用抽象方法。 //抽象类也不可被实例化,因为抽象类中可能会有抽象方法,而抽象方法是没有方法体的,无法被调用 //如果要调用抽象类中的方法,则需要创建一个子类,在子类中将抽象方法进行实现后才行
//如果一个抽象类中所有方法也都是抽象的,那就可以用接口来定义 interface Animal{//定义Animal接口 int id=1;//在接口中定义的所有变量,默认前面使用了public static final修饰,本行等同于 public static final int id=1 void breathe();//在接口中定义的所有方法,默认前面都使用了public abstract修饰,本行等同于 public abstract void breathe void run();//同上 } //抽象方法是不能通过实例化对象来调用的,需要定义一个类并使用implements来实现接口中所有方法 class Dog implements Animal{ //定义一个类,使用了implements来实现Animal接口。注意,当一个类实现接口时,当类是抽象的,可选择实现部分方法,否则要实现所有方法 public void breathe(){ System.out.println("狗在呼吸");//实现了Animal接口中的breathe方法 } public void run(){ System.out.println("狗在跑");//实现了Animal接口中的run方法,本类非抽象类,因此要实现接口中的所有方法,共2个 }//假若不把void run()也实现了,编译会报错: 错误: Dog不是抽象的, 并且未覆盖Animal中的抽象方法run() } public class Example18{ public static void main(String[] args){ Dog dog =new Dog(); dog.breathe(); dog.run(); } }
//接口也可以通过extends关键字继承 interface Animal{ int id=1; void breathe(); void run(); } interface LandAnimal extends Animal{ //接口LandAnimal继承了接口Animal void liveOnland();//并且在继承的基础上,增加一个抽象方法,如果实现的类不是抽象的,那该方法也必须实现,否则编译报错 } class Dog implements LandAnimal{//定义一个类来实现继承了Animal的LandAnimal public void breathe(){ System.out.println("狗在呼吸"); } public void run(){ System.out.println("狗在跑"); } public void liveOnland(){ System.out.println("狗喘着气在陆地上跑");//除了实现Animal的方法,还要实现LandAniml继承Animal后增加的方法 } } public class Example19{ public static void main(String[] args){ Dog dog =new Dog(); dog.breathe(); dog.run(); dog.liveOnland(); } } /** 1.接口中的方法都是抽象的,不能实例化对象 2.当一个类实现接口时,如果这个类是抽象类,可只实现接口中部分方法,否则要实现所有方法 3.通过implements关键实现接口时,可以同时实现多个接口,用","分开,比如implements Run,Fly{} 4.一个接口也中以通过extends关键字继承多个接口,用","隔开,这是与类的继承不同之处。比如interface Eating extends Running,Fly{} 5.一个类在继承另一个类的同时还可以实现接口,要求extends关键字必须在implements之前,先继承,再实现。如class Dog extends Canidae implements Animal{} 表示Dog类继承了Canidae类且实现Animal接口 */