abstract
关键字用于修饰类和方法:
1)抽象类
抽象类是一个受限制的类,不能用于创建对象(要访问它,它必须从另一个类继承)。
2)抽象方法
抽象方法只能在抽象类中使用,并且没有实现。 由子类实现抽象方法(从继承)
抽象类可以同时具有抽象方法和常规方法:
abstract class Animal { public abstract void eat(); public void sleep() { System.out.println("Zzz"); } }
从上面的示例中,无法创建Animal类的对象:
Animal myObj = new Animal(); 要访问抽象类,它必须从另一个类继承。使用extends关键字从类继承。
接口也是抽象的,抽象的原因与抽象类的原因类似。但用处不同,接口一般用于定义类的统一行为,而抽象类是“继承”。
类重写一个接口中的所有抽象方法称为接口的实现。
接口解决的问题:JAVA不直接支持多继承,但支持多实现。
接口体中包含常量定义和方法声明,不允许对方法进行定义。
接口可以说是完全抽象的抽象类。
子类需要覆盖接口中的所有的抽象方法才能实例化,否则它是一个抽象类。
如果一个类实现了一个接口,该类必须对接口中声明的方法进行定义。实现方法时方法的名字、返回类型、参数个数及参数类型必须与接口声明的一致。
接口中,方法的修饰符默认是public abstract;接口中的常量的修饰符默认是public static final;所以子类中必须使用public来修饰定义的方法。
接口的定义格式:interfacd A{
public static final int size=100;
public abbstract void talk();
}
接口的实现: interfacd A{
public static final int size=100;
public abbstract void talk();
}
class B implements A{
//实现A中的抽象方式
如:
package 接口; interface A{ public static final int size=100; public abstract void talk(); // public abstract void eat(); } class B implements A{ //实现A中的抽象方法 public void talk() { System.out.println("B talk"); } } public class Demo { public static void main(String[] args) { new B().talk(); } }
抽象类与接口的异同: