抽象类
抽象方法是指没有方法体的方法,同时抽象方法还必须使用关键字abstract做修饰。
注意点:
- 拥有抽象方法的类就是抽象类,抽象类也要用abstract关键字声明。
- 抽象类不能实例化,依靠子类向上转型。
- 子类如果需要实例化,就必须重写所继承的抽象类中的所有抽象方法。
向上转型:
定义:
Animal animal = new Dog();
- 父类对象指向子类对象。
- 父类对象无法调用子类对象中特有的方法。
- 通过父类引用变量调用的是子类调用或覆盖父类中的方法,不是父类的方法。
向下转型
- 将一个指向子类对象的父类引用赋给一个子类的引用,称为向下转型,必须进行强制类型转换。
接口和抽象类的区别
- 接口比抽象类更加的抽象
- 抽象类可以提供成员方法的实现细节,而接口中只能出现public abstract 方法
- 抽象类的成员变量可以是各种类型的,而接口中的成员变量只能是public static fina类型的
- 接口中不能含有静态代码块及静态方法,而抽象类中可以有。
- 一个类只能继承一个抽象类,而一个类可以实现多个接口
- 设计层的区别
– 抽象类是对一种事物的抽象,即对类的抽象,而接口是对行为的抽象。
为什么要使用接口:
- 如果项目过于复杂,需要一个抽象力很高的人专门设计这个接口,他可以忽略实现的细节,把精力花在涉及上,提高效率。
- 体现多态性,实现系统的解耦,如果需要将原来使用的mysql换成orcal,那么可以专门针对接口写一套实现,而不会惊动上层。