Java基础——Java"多继承"的三种实现方式
Java语言本身只支持单继承(每个类只能有一个父类),但单继承的局限性很大,因此,可以通过以下的方式实现"多继承"。
多层继承
内部类
接口
1、多层继承
通过继承的层叠实现多继承,但多层继承一般不要超过3层,代码比较冗余。
class A{
public void getA(){
System.out.println("This is A");
}
}
class B extends A{
public void getB(){
System.out.println("This is B");
}
}
class C extends B{
public void getC(){
System.out.println("This is C");
}
}
public class MultipleInherit {
public static void main(String[] args) {
// 此时的C通过继承B,也继承了A(B继承着A),从而实现了"多继承"(C继承了A与B)
C c = new C();
c.getA();
c.getB();
c.getC();
}
}
输出如下:
2、内部类
使用成员内部类也可实现"多继承"
class D{
public void getD(){
System.out.println("This is D");
}
}
class E{
public void getE(){
System.out.println("This is E");
}
}
class F{
class F1 extends D{
public void getDAndF1(){
System.out.println("This is F1");
getD();
}
}
class F2 extends E{
public void getEAndF2(){
System.out.println("This is F2");
getE();
}
}
public void fun(){
// 在外部类中的方法中,调用内部类的方法与属性(内部类对外部类外部并不可见)
// 内部类只在外部类中被调用,对外部类的外部不可见,这种设计更能体现封装性
new F1().getDAndF1();
new F2().getEAndF2();
}
}
public class MultipleInherit2 {
public static void main(String[] args) {
F f = new F();
f.fun();
}
}
输出如下:
3、接口
与前面两种方式(尤其是内部类)相比,接口是最能体现"多继承"的方式,可以通过实现接口的多继承性(接口可以使用extends继承多个父接口)来实现"多继承",在即可以使用内部类又可以使用接口时,优先选择使用接口。
interface IA{
void funA();
}
interface IB{
void funB();
}
// 使用接口多继承实现"多继承"
interface IC extends IA,IB{
void funC();
}
// 实现接口IC的同时需要实现接口IA,IB
class CImpl implements IC{
@Override
public void funA() {
System.out.println("This is A");
}
@Override
public void funB() {
System.out.println("This is B");
}
@Override
public void funC() {
System.out.println("This is C");
}
}
public class MultipleInherit3 {
public static void main(String[] args) {
IC c = new CImpl();
c.funA();
c.funB();
c.funC();
}
}