使用内部类让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类的继承、包及接口 本章实验的任务主要是了解Java中类的继承、类包、内部类、匿名类及接口的基本构成及应用。
定义在一个类内部的类叫内部类,包含内部类的类...内部类可以声明public、protected、private等访问限制,可以声明为abstract的供其他内部类或外部类继承与扩展,或者声明为static、final的,也可以实现特定的接口。
Java语言中的内部类根据定义的位置和访问权限可以分为四类:成员...匿名内部类是没有命名的内部类,通常用于实现接口或继承父类;静态内部类是定义在类的内部且与类的实例无关的类。以上是对内部类的简要分类和认识。
实现重载(overload)和重写(override) 调用中用到多态,向上转换,强制转换 所有被创建的类,都各自创建两个实现接口 最底层的类中创建内部类,并在外部类中调用内部类的方法
ThreadImRunnable.java 继承Runnable接口实现多线程 mulThread.java 创建多个线程对象的类 demoJoin.java 演示使用join()以确保主线程最后结束 clicker.java 一个计数用的线程类 demoPri.java 调用上面这个类...
很好的Java面试题第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
Java 内部类有什么好处?为什么需要内部类? 首先举一个简单的例子,如果你想实现一个接口,但是这个接口中的一个方法和你构想的这个类中的一个方法的名称,参数相同,你应该怎么办?这时候,你可以建一个内部类...
5 抽象类、接口与内部类 编写程序实现类的继承、与接口的编写。 6 异常 编程实现处理异常的语句,理解处理与抛出的区别,学会自定义异常。 7 Java流 用输入输出流实现从一个文本文件中读写简单数据。 8 泛型与容器...
不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现 3、Static Nested Class 和 Inner Class的不同 答:Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部...
第3版 机械工业出版社 教学内容和要求 知识点 重要程度 使用频度 难度 Java 入门 高 中 易 变量和运算符 高 高 中 控制结构 高 高 易 数组 高 高 中 方法 很高 高 中 封装 很高 很高 难...
Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理 Java集合详解2:Queue和LinkedList Java集合详解3:Iterator,fail-fast机制与比较器 Java集合详解4:HashMap和HashTable Java集合详解5:深入...
含基础篇,核心篇,框架篇,微服务篇 ... Java 支持创建只暴漏接口而不包含方法实现的抽象的类。这种抽象技术的主要目的是把类的行为和实现细节分离开。 1.1.2 final, finally, finalize 的区别。。。
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接口 1.1 什么是接口?: 接口相当于特殊的抽象类,定义方式、组成部分于抽象类类似。 微观概念:接口是一种能力和约定 接口的定义:代表了某种能力 方法的定义:能力的具体要求 经验:...
不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现 3、Static Nested Class 和 Inner Class的不同 答:Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类...
Java集合详解:一文读懂ArrayList,Vector与Stack使用方法和实现原理 Java集合详解:Queue和LinkedList Java集合详解:迭代器,快速失败机制与比较器 Java集合详解:HashMap和HashTable Java集合详解:深入理解...
6.7.3 使用内部类 208 学生提问:既然内部类是外部类的成员,是否可以为外部类定义子类,在子类中再定义一个内部类来重写其父类中的内部类? 211 6.7.4 局部内部类 211 6.7.5 匿名内部类 212 6.7.6 闭包...
不写时默认为friendly2、 Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类, 是否可以implements(实现)interface(接口) 答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个...
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 ...