1、Java的抽象类
(1)用abstract关键字修饰的类被指定为抽象类(充分必要条件)。
(2)含有抽象方法的类必须被声明为抽象类,抽象方法只需声明而不需实现,扩展类必须重写抽象方法。
(3)抽象类只能由其子类来实例化。
(4)抽象类的扩展子类不是必须实现抽象类的抽象方法,此时其子类也是抽象的;子类可以进一步被扩展(继承),看上去就是类的多重继承的关系。
(5)抽象类可以实现一个或多个接口,接口的具体实现可以在抽象类里,也可以放在子类里。
定义抽象类水果(fruit)
public abstract classfruit{
public abstract void eat();
}
如果我们试图用以下语句来获得一个实例,将无法编译成功。
fruit f= new fruit ();
而我们仍然可以构造水果类的子类,如:
子类“苹果(apple)”
public class apple extendsfruit {
public void eat() {
System.out.print("eat a apple!");
}
}
子类“橘子(orange)”
public class orange extends fruit {
public void eat() {
System.out.print("eat a apple!");
}
}可以用子类来实例化。
fruit f1= new apple();
fruit f2= new orange ();
2、Java的接口
(1)多个无关的类可以实现同一个接口,同样的,一个类可以实现多个无关的接口。
(2)接口是抽象方法和常量值的定义的集合,接口中只能有抽象方法和常量值。
(3)接口中的抽象方法和常量值默认是public,而且只能是public。
(4)接口可以扩展一个或多个其他接口。
3、java抽象类和接口异同
接口和抽象类显著的共同点是接口和抽象类都可以有抽象方法。
接口和抽象类的不同点有:
(1)抽象类可以有实例变量,而接口不能拥有实例变量,接口中的变量都是静态(static)的常量(final)。
(2)抽象类可以有非抽象方法,而接口只能有抽象方法。
注意:相同的类型用extends连接,不同类型用implements连接。