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

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

  • 相关阅读:
    实例告诉你如何把 if-else 重构成高质量代码!
    Java8 快速实现List转map 、分组、过滤等操作
    大学四年Java学习路线规划,所有私藏资料我都贡献出来了!
    Redis面试题汇总(附答案),面试突击专用
    代码优化大盘点:35 个 Java 代码优化魔鬼细节
    ES6+Webpack+Babel基本环境搭建
    抽象类和接口的异同及实例解析
    .NET ORM 哪家强
    Asp.Net 高性能ORM框架 SqlSugar.ORM 2.8
    ASP.NET 让无码编程不在是梦 -.NET通用平台、通用权限、易扩展、多语言、多平台架构框架
  • 原文地址:https://www.cnblogs.com/haodawang/p/5967249.html
Copyright © 2011-2022 走看看