java 多重继承

生活中有没有这样一种例子,有一样东西既是一种东西,又可以是另一种东西,比如平板电脑,它既可以实现手机的功能,又可以实现电脑的功能,这正好就体现了多重继承了。
先来声明一个手机的抽象类

abstract class Phone{
    abstract void call();
    abstract void watchMovie();
    abstract void playGames();
}

然后我们再来声明一个电脑的抽象类

abstract class PC{
    abstract void writeProgram();
    abstract void playGames();
    abstract void chatWithFriend();
}

电脑上可以玩游戏,写软件,和朋友聊天什么的
那么我们再来创建一个平板电脑的类,那平板电脑可以通过一种什么样的方式来实现同时继承这两个类的方法呢?
我们可以通过内部类来实现它

class OuterPanelComputer extends Phone{

    @Override
    public void call() {
        // TODO Auto-generated method stub
        System.out.println("call");
    }

    @Override
    public void watchMovie() {
        // TODO Auto-generated method stub
        System.out.println("watchMovie");
    }

    @Override
    public void playGames() {
        // TODO Auto-generated method stub
        System.out.println("playGames");
    }
    class PanelComputer extends PC{

        @Override
        public void writeProgram() {
            // TODO Auto-generated method stub
            System.out.println("writeProgram");
        }

        @Override
        public void playGames() {
            // TODO Auto-generated method stub
            System.out.println("playGames");
        }

        @Override
        public void chatWithFriend() {
            // TODO Auto-generated method stub
            System.out.println("chatWithFriend");
        }
        public void call() {
            // TODO Auto-generated method stub
            OuterPanelComputer.this.call();
        }

        public void watchMovie() {
            // TODO Auto-generated method stub
            OuterPanelComputer.this.watchMovie();
        }
    }
}

注意这里内部类在复写的call和watchmovie方法里调用了外部类的call 和watchmovie
由于内部类是可以访问到外部类的所有的方法的,所以,这里我们创建一个内部类的对象的话,实际上也可以看作是在创建一个继承两个类的类,也就是伪多重继承。

public static void main(String[] args) {
        // TODO Auto-generated method stub
        OuterPanelComputer outerpanelcomputer = new OuterPanelComputer();
        OuterPanelComputer.PanelComputer panelcomputer = outerpanelcomputer.new PanelComputer();
        panelcomputer.chatWithFriend();
        panelcomputer.playGames();
        panelcomputer.watchMovie();
        panelcomputer.call();
        panelcomputer.writeProgram();
    }
}

这样的话,就能实现多重继承了,实际上我们也是在操控内部类。

转载于:https://www.cnblogs.com/haodawang/p/5967249.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值