抽象类 abstract
抽象类 = 普通方法 + 抽象方法
- 抽象类是类
- 多了抽象的方法,类也必须是抽象类。
- 抽象方法没有方法体
- 抽象类不能实例化,不能创建对象
- 抽象类必须有子类,来实现所有的抽象方法
- 如果子类没有实现所有的抽象方法,那么子类也是抽象类
- 仍旧使用满足多态的特性,所以方法和参数也会使用抽象父类的引用。
在开发过程中,对于有些方法一定要实现,则会把此方法在父类中声明为抽象方法,对于有些方法不一定实现,在抽象父类中声明成普通的方法,子类可以选择性的对父类的普通方法进行重写来完成相应的逻辑。
总结抽象类的限制:
- 抽象类不能使用final关键字,因为final关键字修饰类,不存在子类。
- 抽象类虽然不能实例化,但是可以像普通类一样,拥有属性和构造方法,子类可以通过父类的构造方法来完成子类自己的构造。
接口(重中之重) interface
接口是抽象的抽象
抽象类的不足:
- 类 单继承 单一
- 类中既有普通方法也有抽象方法,杂乱
由于抽象类的不足,出现了接口。接口可以解决以上问题
接口特性:
- 接口不是类,但是存在.java文件中,编译之后也会生出.class文件。
- 在接口内部只能定义抽象方法,方法通常只写返回类型和方法名,可以省略public abstract
- 接口中只存在常量,默认是有public final修饰,可省略。常量名都用大写字母。
- 接口不能实例化。
- 如果使用结构,就要实现接口中的所有抽象方法
- 定义了某种功能
- 接口定义了某种功能
- 接口感觉上实现了类的多继承
- 接口也属于功能上的延伸
- 接口貌似是具体类的父类,可以实现类的向上转型(把具体类的对象赋给了接口的引用)
- 接口可以实现多继承,具体的类可以实现多个接口
- jdk1.8开始,接口中也可以实现普通方法,为了实现函数式编程(了解)
- 依照类的多态特性,如果方法的参数为接口的引用,传递的就是实现接口的类。如果是类的引用,传递的就是子类对象。
- 先继承父类后实现接口。
接口和抽象类的区别(面试考点)
- 接口不是类。
- 在抽象方法里面既能定义抽象方法,又能定义普通方法,但是在接口中,只能定义抽象方法
- 抽象类只能实现单继承,接口可以实现多继承
- 抽象方法必须有子类,接口不是必须的
- 抽象类可以定义属性,但是在接口中只能定义常量。
普通类 抽象类 接口 关系
- 普通类继承普通类,也继承抽象类,实现接口。
- 抽象类继承普通类,也继承抽象类,实现接口
- 接口只能继承接口