概括:抽象类中可以有一些方法但又无须提供它的实现,通过子类实现抽象类中的抽象方法。
举例:
abstract class Animal3{ public abstract void shout(); } class Dog3 extends Animal3{ public void shout(){ System.out.println("汪汪"); } } public class Page117 { public static void main(String[] args) { Dog3 dog=new Dog3(); dog.shout(); } }
注意:
概括:接口是特殊的抽象类,它不能包含普通方法,内部所有方法都是抽象方法。JDK8中对接口进行了重新定义,接口中除抽象方法外还可以有默认方法和静态方法(也叫类方法),分别用default和static修饰,且两种方法都允许有方法体。与定义类不同的是,定义接口不再使用class关键字,而是使用interface关键字。
语法:
[修饰符] interface 接口名 [extends 父接口1,父接口2,...]{ [public] [static] [final] 常量类型 常量名=常量值; [public] [abstract] 方法返回值类型 方法名([参数列表]); [public] default 方法返回值类型 方法名([参数列表]){ //默认方法方法体 } [public] default 方法返回值类型 方法名([参数列表]){ //静态方法方法体 } }
注意:
静态方法可以通过接口名.方法名调用,而抽象方法和默认方法只能通过接口实现类的实例对象来调用,接口的实现类必须实现接口中的所有抽象方法,通过implements关键字来实现接口,一个类可以在继承另一个类的同时实现多个接口
语法:
[修饰符] class 类名 [extends 父类名] [implements 接口1,接口2,...]{ }
举例:
interface Animal4{ int ID=1; //全局常量 void breathe(); //抽象方法 default void getType(String type){ System.out.println("该动物属于"+type); } static int getID(){ return Animal4.ID; } } class Dog4 implements Animal4{ public void breathe(){ System.out.println("狗在呼吸"); } } public class Page118 { public static void main(String[] args) { System.out.println(Animal4.getID()); Dog4 dog=new Dog4(); System.out.println(dog.ID); dog.breathe(); dog.getType("犬类"); } }
注意: