抽象:
抽象类:
abstract class A{
...
}
抽象方法:abstract int min(int x,int y);
对于abstract 方法,只允许声明,不允许实现(没有方法体{})
不能用private修饰abstract方法
不能用final和abstract同时修饰一个方法或类
不能用static修饰abstract方法,abstract必须是实例方法
抽象类中可以有抽象方法或非抽象方法(意义不大可作为工具类防止被实例化) 非抽象类不能有抽象方法(接口一定是抽象方法)
非抽象方法必须重写它父类抽象方法(去掉父类abstract,给出方法体) 抽象方法可以重写或继承父类抽象方法
接口:
只有常量没有变量声明,常量一定是public static
public static final int a=1 ; //等价int a=1;
只有抽象方法没有普通方法,方法一定是public abstract(允许省略)
public abstract void add(); //等价void add();
非抽象类实现了某接口,必须重写这接口所有方法,这个接口原来一定是 public abstract,重写一定要加public (否则降低权限) public interface可以被任一个类实现(无敌),不加public 可以被同一个包的类实现(友好)
可用接口名访问接口的常量 接口被类实现,类可以使用该接口的全部常量 接口可被继承extend,子接口继承父接口全部方法和常量
区别
相同点:
① 抽象类和接口都不能被实例化
② 抽象类和接口都可以定义抽象方法,子类/实现类必须重写这些抽象方法
不同点:
① 抽象类有构造方法(不加隐式构造),接口没有构造方法
② 抽象类可以包含普通方法,接口中只能是public abstract修饰抽象方法(Java8之后可以)
③ 抽象类只能单继承,接口可以多继承
④ 抽象类可以定义各种类型的成员变量
///接口中只能是public static final修饰的静态常量