面向对象特征-抽象
Java中,除了类,还有抽象类和接口
抽象方法必须在一个抽象类里面
当我们定义了一个抽象类,这个抽象类中可以有哪些结构?
- 属性、成员方法、构造器、抽象方法、常量
抽象类中能不能没有抽象方法?
- 抽象类中可以没有抽象方法
抽象类不能干什么?
- 抽象类是不能被实例化的、不能创建对象的
抽象类构造器存在的意义?
- 为了约定子类的构造器必须和父类要匹配
- 一个类如果继承了一个抽象类,就必须重写这个抽象类的所有的抽象方法
abstract关键字
- 它能能修饰什么?类、方法。
- 抽象方法不能用
private
修饰 - 抽象方法不能用
final
修饰(用final
修饰的方法 不允许重写) - 抽象类能不能用
final
修饰,(用final
修饰的类,是不予许被继承的)
总结
1、抽象方法必须是
public
或者protected
,因为如果是private
,不能被子类继承
子类便无法实现该方法,默认情况下是可以的(默认情况其实就是public
)2、抽象类是不能被直接实例化的,它需要依靠子类采用向上转型的方式处理
3、抽象类必须有子类,使用
extends
继承,一个类只能继承一个类4、子类(如果不是抽象类)则必须重写抽象类中的所有抽象方法
(如果子类没有实现父类的抽象方法,必须将子类也定义为abstract
)
抽象方法
抽象方法没有大括号,没有方法体
抽象方法存在的意义是什么?根本意义,约定,自定义的规则
接口
接口是什么? 比抽象类更高级的抽象 (抽象,比类更高级的抽象)
如何声明? 使用interface
关键字public interface Ch02
JDK 1.7之前,接口中只能定义抽象方法,不能有实例对象,不能有属性,不能有方法,只能有抽象方法 (可以放静态常量和静态方法)
JDK 8及以后,接口中只能定义抽象方法,不能有属性,可以有默认方法和静态方法,静态常量。
JDK7--JDK8:默认方法、静态方法
接口中结构的特点
接口中的抽象方法默认是public abstract
(推荐省略掉)
接口中的常量默认是什么样的?public static final
(推荐省略掉)
接口中的结构必须是public
接口可以被实现,所以叫做实现类
比如说A类 implements
接口,那我们就说A是这个接口的实现类
如果一个类实现了一个接口 它就需要重写接口中的所有抽象方法
另外,实现接口是可以多实现的,继承只能单继承
开发中,如果一件事情可以通过继承和实现接口来解决问题,接口解决
多态的前提条件
- 继承、实现
- 重写方法
- 父类--子类、接口--实现类