zoukankan      html  css  js  c++  java
  • 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();
    	}
    }
    

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

  • 相关阅读:
    【图灵学院09】RPC底层通讯原理之Netty线程模型源码分析
    【图灵学院10】高并发之java线程池源码分析
    【图灵学院02】大型互联网技术之数据库分库分表
    【图灵学院01】Java程序员开发效率工具IntelliJ IDEA使用
    【OD深入学习】Java多线程面试题
    高级工程师->架构师
    架构师成长之路
    python--openCV--鼠标事件
    python--openCV--视频处理
    python--openCV
  • 原文地址:https://www.cnblogs.com/haodawang/p/5967249.html
Copyright © 2011-2022 走看看