一、抽象类
1.抽象类不能实例化,因为有抽象方法未实现
2.可以被抽象类或非抽象类继承
3.但不是只能被继承,还可以直接拿来使用的,当然,这个使用是拿来声明,反例如下:
1 public abstract class FanLi { 2 public abstract void nouse(); 3 public static void main(String[] args) { 4 FanLi.fun(); 5 } 6 public static void fun() { 7 System.out.println("我是反例"); 8 } 9 }
4.可以有自己的数据成员,也可以有非abstarct的成员方法。成员变量和方法不建议用private修饰,但可以用不会报错。
5.抽象方法能用public和默认default修饰(以前是protected)。
6.可以有非抽象方法
二、接口
1.接口不能直接实例化。
2.方法默认都是 public abstract 类型的,JKD8新增可以使用default修饰,有方法体。
1 interface Formula { 2 double calculate(int a); 3 default double sqrt(int a) { 4 return Math.sqrt(a); 5 } 6 } 7 //实现Formula接口的子类只需要实现一个calculate方法,默认方法sqrt将在子类上可以直接使用
3.不能有私有方法或变量。只能够有静态的不能被修改的数据成员(也就是必须是 static final的,不过在 interface中一般不定义数据成员)。
4.不能有实现方法。
如果Child extends Parent:
如果Child是interface,那么Parent必然是interface
如果Child是interface,那么Child可以同时extends Parent1,Parent2等多个interface
最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。
abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。
实现抽象类和接口的类必须实现其中的所有方法。