`
yuanlanjun
  • 浏览: 1177060 次
文章分类
社区版块
存档分类
最新评论

使用内部类让Java实现“多继承”

 
阅读更多
使用内部类让Java实现“多继承”
众所周知,Java没有像c++那样支持多继承,但是我们可以使用接口或内部类来模拟实现多继承。
我们使用内部类来实现一个继承自消费者,又继承自生产者的派生类。
实际上Java之所以设计出内部类这个概念,一方面是为了更好的封装性,另一方面就是借助内部类模拟实现多继承。
首先我们定义一个消费者抽象基类


/**
 * Consumer Class
 *@author androidyue
 *Last Modified:2011-12-13    上午11:04:56
 */
public abstract  class Consumer {
	protected float buyPrice;
	protected abstract void  buyGoods();
}


以下是生产者抽象基类


/**
 * Producer Class
 *@author androidyue
 *Last Modified:2011-12-13    上午11:04:02
 */
public abstract class Producer {
	protected  float cost;
	protected abstract void produce();
}



使用内部类实现“多继承”的派生子类


/**
 *Java实现“多继承”
 *@author androidyue
 *Last Modified:2011-12-13    上午11:00:25
 */
public class InnerClassDemo extends Producer {
	private ConsumerBuyer buyer;
	
	public void desribeMySelf(){
		System.out.println("使用Java模拟多继承");
		this.produce();
		this.buyer=new ConsumerBuyer();
		this.buyer.buyGoods();
		
	}
	
	@Override
	protected void produce() {
		this.cost=100f;
		System.out.println("我是生产者,我以每件"+this.cost+"RMB的成本生产一件产品,然后以20000元价格对外出售");
	}
	
	class ConsumerBuyer extends Consumer{


		@Override
		protected void buyGoods() {
			this.buyPrice=0f;
			System.out.println("我是消费者,我以"+this.buyPrice+"RMB 买了一件售价20000元的商品,不信吧,因为我也是生产者!^_^");
			
		}
		
	}


}



在程序入口调用

/**
 *  the entrance of application
 *@author androidyue
 *Last Modified:2011-12-13    上午11:20:06
 */
public class AppMain {
	public static void main(String[] args){
		InnerClassDemo demo=new InnerClassDemo();
		demo.desribeMySelf();
	}
}


显示结果:
使用Java模拟多继承
我是生产者,我以每件100.0RMB的成本生产一件产品,然后以20000元价格对外出售
我是消费者,我以0.0RMB 买了一件售价20000元的商品,不信吧,因为我也是生产者!^_^
分享到:
评论

相关推荐

    Java内部类和包装类.ppt

    面向对象程序设计中,可以将一个类的定义 放在另一个类的内部,这就是内部类(有的地方叫嵌套类), 包含内部类的类也被称为外部类(有的地方也叫宿主类...但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口

    第五章_Java类的继承、包及接口

    Java类的继承、包及接口 本章实验的任务主要是了解Java中类的继承、类包、内部类、匿名类及接口的基本构成及应用。

    java语言内部类总结

    定义在一个类内部的类叫内部类,包含内部类的类...内部类可以声明public、protected、private等访问限制,可以声明为abstract的供其他内部类或外部类继承与扩展,或者声明为static、final的,也可以实现特定的接口。

    编程语言-Java语言-关于内部类的分类和认识

    Java语言中的内部类根据定义的位置和访问权限可以分为四类:成员...匿名内部类是没有命名的内部类,通常用于实现接口或继承父类;静态内部类是定义在类的内部且与类的实例无关的类。以上是对内部类的简要分类和认识。

    java 接口 类 继承 多态的简单实例

    实现重载(overload)和重写(override) 调用中用到多态,向上转换,强制转换 所有被创建的类,都各自创建两个实现接口 最底层的类中创建内部类,并在外部类中调用内部类的方法

    Java开发技术大全(500个源代码).

    ThreadImRunnable.java 继承Runnable接口实现多线程 mulThread.java 创建多个线程对象的类 demoJoin.java 演示使用join()以确保主线程最后结束 clicker.java 一个计数用的线程类 demoPri.java 调用上面这个类...

    Java面试题,他会给你很好的Java面试准备,第一,谈谈final, finally, finalize的区别,第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

    很好的Java面试题第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

    Java 中的内部类和匿名类

    Java 内部类有什么好处?为什么需要内部类?  首先举一个简单的例子,如果你想实现一个接口,但是这个接口中的一个方法和你构想的这个类中的一个方法的名称,参数相同,你应该怎么办?这时候,你可以建一个内部类...

    Java语言程序设计实验指导书

    5 抽象类、接口与内部类 编写程序实现类的继承、与接口的编写。 6 异常 编程实现处理异常的语句,理解处理与抛出的区别,学会自定义异常。 7 Java流 用输入输出流实现从一个文本文件中读写简单数据。 8 泛型与容器...

    java笔试题,java程序员常见的笔试

    不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现 3、Static Nested Class 和 Inner Class的不同 答:Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部...

    AIC的Java课程1-6章

    第3版 机械工业出版社  教学内容和要求 知识点 重要程度 使用频度 难度 Java 入门 高 中 易 变量和运算符 高 高 中 控制结构 高 高 易 数组 高 高 中 方法 很高 高 中 封装 很高 很高 难...

    【Java面试+Java学习指南】 一份涵盖大部分Java程序员所需要掌握的核心知识

    Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理 Java集合详解2:Queue和LinkedList Java集合详解3:Iterator,fail-fast机制与比较器 Java集合详解4:HashMap和HashTable Java集合详解5:深入...

    Java经典面试题(答案解析)

    含基础篇,核心篇,框架篇,微服务篇 ... Java 支持创建只暴漏接口而不包含方法实现的抽象的类。这种抽象技术的主要目的是把类的行为和实现细节分离开。 1.1.2 final, finally, finalize 的区别。。。

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    8.5 小结:包让Java的类更清晰优雅 208 8.6 习题 209 第9章 再看数组、字符串和main()方法 210 教学视频:29分钟 9.1 数组也是类 210 9.1.1 得到数组的长度 210 9.1.2 加餐:不可改变的final变量 211 9.1.3 ...

    Java的接口、内部类、常用类

    JAVA接口、内部类、常用类 一、JAVA接口 1.1 什么是接口?: 接口相当于特殊的抽象类,定义方式、组成部分于抽象类类似。 微观概念:接口是一种能力和约定 接口的定义:代表了某种能力 方法的定义:能力的具体要求 经验:...

    java面试题大全-基础方面

    不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现 3、Static Nested Class 和 Inner Class的不同 答:Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类...

    Java工程师面试复习指南

    Java集合详解:一文读懂ArrayList,Vector与Stack使用方法和实现原理 Java集合详解:Queue和LinkedList Java集合详解:迭代器,快速失败机制与比较器 Java集合详解:HashMap和HashTable Java集合详解:深入理解...

    疯狂JAVA讲义

    6.7.3 使用内部类 208 学生提问:既然内部类是外部类的成员,是否可以为外部类定义子类,在子类中再定义一个内部类来重写其父类中的内部类? 211 6.7.4 局部内部类 211 6.7.5 匿名内部类 212 6.7.6 闭包...

    java面试宝典

    不写时默认为friendly2、 Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类, 是否可以implements(实现)interface(接口) 答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    8.5 小结:包让Java的类更清晰优雅 208 8.6 习题 209 第9章 再看数组、字符串和main()方法 210 教学视频:29分钟 9.1 数组也是类 210 9.1.1 得到数组的长度 210 9.1.2 加餐:不可改变的final变量 211 9.1.3 ...

Global site tag (gtag.js) - Google Analytics