抽象类
抽象类不能被实例化(不能new对象),他的作用是提供给其他类进行继承。
关键字abstract
修饰类,类为抽象类,不能被实例化
修饰方法,方法为抽象方法,只有方法的签名,没有方法体
抽象类特点:
1 抽象类不能实例化,即抽象类不能创建对象
2 子类继承(extends)抽象类,必须实现该抽象类当中所有的抽象方法(除非子类也是一个抽象类)
3 抽象类,可以包含抽象方法和非抽象方法(普通方法)以及变量;
4 如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误
5 抽象类中也可以不包含抽象方法
6 抽象类可以有父类,但是父类必须有一个无参的构造函数,否则,抽象类必须声明一个与父类相同的有参构造方法。
接口
接口是一个比抽象类还抽象的类型,是抽象方法和常量值的定义的集合
声明接口关键字 interface
实现接口关键字implements
接口的特点:
1 用interface关键字声明接口;
2 子类实现接口,并重写接口的所有的方法;
3 接口只有方法的签名,没有普通方法,也没有变量
4 接口不能自身实例化,接口的实现类可以实例化
5 接口可以实现多个,而父类只有一个(单亲继承),而且必须先继承(extends)父类再实现(implements)接口
6 接口中的方法都是抽象方法,默认方法前边public abstract
接口的优点:
1 解决Java中的单亲继承问题(继承只能是单亲继承,但是一个类可以实现多个接口)(单继承,多实现)
2 接口可以实现并行开发
3 便于重构
类型转换
向上转型:子类对象向父类转型
1 将一个【父类的引用】指向一个子类对象,称为向上转型,此时自动进行类型转换(即可以理解为创建了一个父类类型的子类对象)
2 通过父类的引用调用的方法,是子类重写或继承父类的方法,而不是父类原本的方法,更不是子类持有的方法
3 通过父类的引用无法调用子类特有的方法,即向上转型的子类对象只能调用继承父类的方法,而不能调用子类独有的方法,方法数量缩小,安全。
向下转型: 父类对象 向子类转型
父类对象向子类转换需要强制类型转换
1 将一个指向子类对象的父类引用赋给一个子类的引用,称为向下转型