抽象类和接口(精)

404 阅读2分钟

抽象:

抽象类:

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修饰的静态常量