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();
    	}
    }
    

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

  • 相关阅读:
    java基础知识回顾之final
    基础知识《十四》Java异常的栈轨迹fillInStackTrace和printStackTrace的用法
    基础知识《六》---Java集合类: Set、List、Map、Queue使用场景梳理
    基础知识《五》---Java多线程的常见陷阱
    基础知识《四》---Java多线程学习总结
    《转》如何选择合适的服务器托管商
    基础知识《三》java修饰符
    基础知识《零》---Java程序运行机制及运行过程
    应用 JD-Eclipse 插件实现 RFT 中 .class 文件的反向编译
    DOS命令符基本操作
  • 原文地址:https://www.cnblogs.com/haodawang/p/5967249.html
Copyright © 2011-2022 走看看