Java中多继承的实现

Posted 算法与编程之美

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中多继承的实现相关的知识,希望对你有一定的参考价值。

1 问题

Java是一种面向对象的只允许单继承的语言,那么怎样在Java中实现多继承呢?

2 方法

  1. 多层继承
    如果要直接继承类,子类是不可以直接多继承的,但是可以通过多层继承来实现多继承,但多层继承一般不建议超过三次。

  2. 接口

接口可用于继承也可用于其它,比较灵活。定义类实现接口,需要实现其所有父接口的方法。

多层继承:
package weekbook;
class A//父类A类
   private int num=10;
   public int getNum()
       return this.num;
   
   public void fun()
       System.out.println("你今天天气真好!");
   

class B extends A//B类继承A类
   private String name="张三";
   public String getName()
       return this.name;
   
   public void fun()//方法覆写
       System.out.println(this.getNum());
       //父类私有域被继承但不可直接使用,需通过getter方法间接获得私有域的内容
       //子类中没找到那么会去父类中寻找
   

class C extends B//C类继承B类,相当于间接继承A类
   private String name="李四";
   public String getName()
       return this.name;
   
   public void fun()//方法覆写(结果为覆写后的内容)
       System.out.println(this.getName());
       System.out.println(this.name);
   

public class Test
   public static void main(String[] args)
       A a=new A();
       a.fun();
       print(new B());//向上转型(优点在于子类可自动进行向上转型,可实现参数的统一)
       print(new C());
   
   public static void print(A a)
       a.fun();
   

接口:
package weekbook;
interface IA//父接口A(接口为更纯粹的抽象类,结构组成只含全局常量和抽象方法)
   void funA();

interface IB //父接口B(接口前添加I用以区分接口)
   void funB();

interface CImpl extends IA,IB//接口可继承多个父接口,用,分隔开即可,子接口的命名可选择较为重要的父接口进行命名或自行命名,一般子接口后添加Impl用以区分
   void funC();

class Impl implements CImpl//定义类实现接口(也可直接实现父接口(多个))
   public void funC()//抽象方法的实现
       System.out.println("昨天吃串串!");
   
   public void funA()
       System.out.println("今天吃火锅!");
   
   public void funB()
       System.out.println("明天吃冒菜!");
   

public class Test1
   public static void main(String[] args)
       Impl im=new Impl();//实例化对象
       im.funA();
       im.funB();
       im.funC();
   

3 结语

针对如何实现多继承的问题,提出利用多层继承和接口的方法,通过实验,证明该方法是有效的,本文的每种方法都有各自的短处,多层继承一般不超过三层 。接口实现多继承时,一个Java接口加入一个新的方法时,所有实现这个接口的类都得编写具体的实现。在未来,我们可以探索利用成员内部类来实现多继承的方法。

以上是关于Java中多继承的实现的主要内容,如果未能解决你的问题,请参考以下文章

java继承

07 JVM 是如何实现反射的

4-5 《Java中多线程重点》——继承Thread实现Runnable死锁线程池Lambda表达式

java中多线程的两种创建方式

Jvm(58),类加载器----双亲委派模型

最近在研究多线程,浅谈JAVA中多线程的几种实现方式