抽象类 abstract class
包含抽象方法的类,叫抽象类。而抽象的概念就是抽象出共同属性:成员变量和方法。所以抽象类可以有private等多种权限的成员变量和非abstract的成员方法。当然抽象方法是一定要有的。
抽象类是用于单一继承的,不能实例化。而继承类一定要实现抽象方法,因为抽象方法在抽象类里是没有实现行为的,访问权限只能是public。而非抽象方法则可以赋予方法的默认行为,访问权限可以多种,但需要考虑非抽象方法是否需要被继承类访问。
接口 interface
接口,用于多重继承,也不能实例化。只能包含static final的成员变量,不过在interface中一般不定义成员变量。而成员方法在接口里只能是抽象方法,访问权限只能是public。
所以,无论抽象类还是接口,抽象方法都需要在子类中实现,而且在子类中实现这些方法一个都不能少。而抽象类里面的非抽象方法,则在子类可以不重写实现里面的行为。
案例1:
package extendsPackage; public class Child extends Children implements Lover { public Child(String name) { super(name); } public void printName() { System.out.println(super.getName()); } public void love(String name) { System.out.println(name + ", I love you!"); } public static void main(String[] args) { Child boy = new Child("Charley"); System.out.println(boy.getName()); Child girl = new Child("Queenie"); girl.printName(); boy.love(girl.getName()); girl.love(boy.getName()); } /** * 输出结果为: * Charley * Queenie * Queenie, I love you! * Charley, I love you! */ } // 抽象类 abstract class Children { private String name; public Children(String name) { this.name = name; } // private then Child obj can not access this method // private String getName() { public String getName() { return name; } abstract void printName(); } // 接口 interface Lover { void love(String name); }