Java 实现“多继承”

一、Java语言特点

Java是一种简单、面向对象、分布式、易读、鲁棒、安全、结构明晰、可移植、高性能、多线程、动态的语言。

  • 面向对象(继承、封装、多态)
  • 一次编译,到处运行(JVM实现跨平台运行)
  • 可靠性
  • 安全性
  • 支持多线程(对比C++没有内置多线程机制)
  • etc...

二、Java为什么不支持多继承?

多继承:指一个子类同时继承多个父类,从而具备多个父类的特征

多继承会造成

1、若子类继承的父类中拥有相同的成员变量,子类在引用该变量时将无法判别使用哪个父类的成员变量

2、若一个子类继承的多个父类拥有相同方法,同时子类并未覆盖该方法(若覆盖,则直接使用子类中该方法),那么调用该方法时将无法确定调用哪个父类的方法。

Java为了简单,废弃了C++中非常容易混淆的多继承等特性。

三、Java实现“多继承”的三种方式

上面提到的Java不可以多继承特指类,而Java的多继承机制可以通过多层继承、内部类以及接口来实现

多层继承:实际就是多个单继承累积,最下面的子类可以具备前几个父类的特征,但这样的多继承会造成代码冗余,可读性较差,一般的开发同学都不会这样浪费时间。

内部类:通过成员内部类实现多继承,代码示例如下

class dota {
    private String str = "let's play some dota";

    public void play() {
        System.out.println(str);
        System.out.println("好呀好呀");
    }
}
class lol {
    private String str2 = "let's play some lol";
    public void play() {
        System.out.println(str2);
        System.out.println("不约");
    }
}
class player {
    class dotar extends dota {
        public void play() {
            super.play();
        }
    }
    class loler extends lol {
        public void play() {
            super.play();
        }
    }
    public void play() {
        dotar d = new dotar();
        d.play();
        loler l = new loler();
        l.play();
    }
}
public class MultiExtendTest1 {
    public static void main(String[] args) {
        player p = new player();
        p.play();
    }
}

接口:多继承机制实现优先使用接口,接口使用比较灵活,在企业级项目编程是最推荐的方式,示例代码:

interface Dota{
    void play();
}
interface Lol{
    void play();
}
interface test extends Dota,Lol{
    void sayhi();
}
class Player implements test,Dota,Lol{
    public void play(){
        System.out.println("let's play some dota");
    }
    public  void sayhi(){
        System.out.println("hi");
    }
}
public class MultiExtendTest2{
    public static void main(String[] args) {
        Player p=new Player();
        p.play();
        p.sayhi();
    }
}

接口注意事项:

  • 和抽象类一样,接口不能实例化,接口是特殊的抽象类
  • 如果一个类继承了接口,必须重写实现接口中的所有方法
  • 接口没有构造函数,抽象类可以有
  • 接口的属性都是默认static final,在定义时指定初始值,接口中只有常量,接口的方法自动用public abstract修饰,只有全局抽象方法
  • 接口只有方法的声明,没有方法体
  • 抽象类可以在不提供接口方法实现的情况下实现接口
  • 23
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值