抽象类(接口的基础)
在讲抽象类之前咱们先了解一下什么叫做抽象方法。
什么是抽象方法?
1.用abstract修饰的方法叫做抽象方法。
2.抽象方法只能被定义,不能被实现。
3.抽象方法只能出现在抽象类里面。
什么是抽象类?
1.用abstract修饰的类叫做抽象类。
public abstract class Animal {}
2.抽象类中可以有若干个抽象方法。
3. 抽象类里面可以有一般的变量和方法,也可以有静态变量和方法。
4.抽象类如果被继承,父抽象类中所有的抽象方法必须重写。如果没有完全重写父类所有的抽象方法,那么要将自己变成抽象类。抽象特性向下传递,直到重写完所有的重新方法。
eg:祖父有5个抽象方法,父类只重写祖父3个抽象方法,那么父类也要变成抽象类,子类继承父类未继承的2个抽象方法,子类就是普通类了。
5.抽象类只能被继承不能被实例化。抽象类也具有继承的特性(详细版见多态(Java中面向对象的三大特征之一)-CSDN博客)
(1)子类拥有父类所有的属性和方法(子类是父类)
(2)子类可以拥有自己的属性和方法(子类扩展父类)
(3)父类可以装载子类(向上转型)
a.子类可以代替父类存在
b.声明父类,就调用父类的属性和方法
c.创建子类,就运行子类重写父类后的方法体,如果父类有方法没有被重写,依然运行的是父类的方法体。
d.父类可以强制转换为子类(向下转型)
抽象类,父类:Employee。
普通类,子类:Worker。
如下,若是,如果父类里面的抽象方法,没有重写完全,那么将会报错
修改普通类,子类,将子类也变成抽象的。
测试类
测试结果
接口
什么是接口?
1.接口是用interface定义的Java文件
2.接口是纯虚的抽象类,接口也是半个类。
注意:接口有属性,全部默认被static final 修饰,可以被视为常量,名字要大写且不能被修改
注意:接口可以有一般的方法,方法默认被public abstract 修饰,可以被视为抽象方法。
3.接口就是功能,功能就是接口。
接口定义了"能做什么"(功能),而不关心"如何做"(实现),如接口中一般的方法默认为抽象方法,只有方法原型,没有方法体。定义了方法原型就代表有了功能。方法体留有以后的类来实现。
为什么要使用接口?
因为Java中的继承是单继承,不能多继承,而有了接口就可以弥补单继承的不足,模拟多继承的效果。
子接口可以继承多个父接口。子接口只继承父接口的功能,不重写父接口里面的方法。
修饰符 interface 子接口 extends 父接口1,父接口2 {
..
}
类可以实现多个接口。类实现接口,要重写接口里面所有的抽象方法
修饰符 class 类名 implements 接口1, 接口2,... {
...}
4.面向接口编程
接口往往用来完成一些功能,相当于半个类,开发过程中,接口可以提高开发效率,使
代码更容易维护。
5.接口也可以实现多态(多态是不同对象在调用同一个方法,表现出多种不同的行为。)
总结:
什么是什么,可以理解为继承关系。
什么能干什么,可以理解为接口的实现。
下面用一个具体的例子来介绍接口
接口Run
接口Fly
接口:FlyAndRun(继承了Run 和 Fly)
Body类:Body类实现了接口FlyAndRun, 就必须重写接口里面所有的抽象方法
测试类
测试结果