一、抽象类和方法
1、抽象方法必须使用abstract修饰,不能带花括号。
2、带有抽象方法的类称为抽象类,必须用abstract修饰,反过来抽象类中可以没有抽象方法。抽象类中含无具体实现的方法,所以不能用抽象类创建对象。抽象类只能被继承。
3、抽象方法默认为public,必须为public或protected(如果为private,就无法被子类继承,毫无意义)。
4、如果一个类继承了一个抽象类,则子类必须实现父类的抽象方法,如果没有实现抽象方法,则子类也要定义为abstract类。
二、接口
1、接口中可以添加使用default关键字修饰的非抽象方法(此方法可以重载object中的方法,但不能重写),接口里可以声明静态方法并可以使用 (接口名。静态方法名) 来调用(以上是java 8 新特性)
三、两者的同异
相同点:
1、都是抽象类型
2、都可以有实现方法(以前接口不行)
3、都可以不需要实现类或者继承者去实现所有方法。
不同点:
1、抽象类不可以多重继承,接口可以
2、抽象类和接口反映出的设计理念不同,抽象类表示的是“is a”关系,而接口表示的是“like a” 关系
3、接口中的变量必须是public static final ,必须给定初值,在实现类中不能重新定义,抽象类中可以在子类中重新定义和赋值。
4、(重要)在接口中,方法默认就是public abstract的,可以不用在方法前声明abstract,但是在抽象类中,需要我们手动为抽象方法声明是abstract,不然会报错。