今天看代码的时候,发散了一下抽象类与接口之间的实现与继承关系。这里就不罗列什么是接口和抽象类了。在这里理下一他们的关系:
- 普通类可以实现多个接口,但是只能单继承一个抽象类
- 抽象类可以实现多个接口,但是只能单继承一个类(普通类、抽象均可)
- 接口可以继承多个接口,但是不能继承类(普通类、抽象均不可)-其实这个接口继承类的说法就不对,接口是对行为的抽象,抽象类是对类的抽象,两都不能混在一起看,所以你想用接口去继承类,那感觉就是喝葡萄酒加雪碧。
- 抽象类与普通类没什么区别,唯一的区别是抽象类不能实例化对象,可以有抽象方法。
- 普通类继承和实现接口的时候,必须把他们的方法全部实现,如果不全部实现,那么自己会变能abstract类,即抽象类。
上一些代码方便理解:
// interface Quest public interface Quest { void embark(); } //interface C interface C{ void ark(); } //abstract class A abstract class A{ //abstract method abstract void methodA(); //instance method void method(){ System.out.println("abstract classA's instance method!"); } } //abstract class D abstract class Q{ //abstract method abstract void methodQ(); //instance method void method(){ System.out.println("abstract classD's instance method!"); } } //一个类可以实现多个接口,但是只能单继承一个类(包括抽象类) class B extends A implements Quest, C{ //interface Quest.embark() @Override public void embark() { } //interface C.ark() @Override public void ark() { } //abstract A.methodA() @Override void methodA() { } } //抽象类可以实现多个接口 abstract class K implements Quest, C{ } //接口可以继承多个接口 interface X extends Quest, C{ } /* //一个类不能继承多个类 class B extends A, D{ } //接口不能继承抽象类 interface I extends K{ } */