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

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

  • 相关阅读:
    第三十八条:检查参数的有效性
    第二十九条:优先考虑类型安全的异构容器
    第二十八条:利用有限制通配符来提升API的灵活性
    C# 利用第三方SharpZipLib进行ZIP压缩
    无法解决 equal to 操作中 "Chinese_PRC_CI_AS_WS" 和 "Chinese_PRC_CI_AS" 之间的排序规则冲突
    使用EasyUI的treegrid犯的个低级错误
    Js千位分隔符
    Google Chrom浏览器默认只能显示字体大小大于等于12px
    Asp.Net2.0开发小问题汇总
    Oracle dbms_output.put_line长度限制问题
  • 原文地址:https://www.cnblogs.com/haodawang/p/5967249.html
Copyright © 2011-2022 走看看