《JAVA编程思想》学习备忘(第237页:Reusing Classes)-3
来源:互联网 发布:人工智能英文pdf 编辑:程序博客网 时间:2024/05/16 12:35
续《JAVA编程思想》学习备忘(第237页:Reusing Classes)-2
Combining composition and inheritance
It is very common to use composition and inheritance together.The following example shows the creation of a more complex class,using both inheritance and composition,along with the necessary constructor initialization:
//:reusing/PlaceSetting.java
//Combining composition & inheritance.
import static net.mindview.util.Print.*;
class Plate{
Plate(int i){
print("Plate constructor");
}
}
class DinnerPlate extends Plate{
DinnerPlate(int i){
super(i);
print("DinnerPlate constructor");
}
}
class Utenstil{
Utensil(int i){
print("Utensil constructor");
}
}
class Spoon extends Utensil{
Spoon(int i){
super(i);
print("Spoon constructor");
}
}
class Fork extends Utensil{
Fork(int i){
super(i);
print("Fork constructor");
}
}
class knife extends Utensil{
knife(int i){
super(i);
print("knife constructor");
}
}
//A cultural way of doing something:
class Custom{
Custom(int i){
print("Custom constructor");
}
}
public class PlaceSetting extends Custom{
private Spoon sp;
private Fork frk;
private knife kn;
private DinnerPlate pl;
public PlaceSetting(int i){
super(i + 1);
sp = new Spoon(i + 2);
frk = new Fork(i + 3);
kn = new knife(i + 4);
pl = new DinnerPlate(i + 5);
print("PlaceSetting constructor");
}
public static void main(String[] args){
PlaceSetting x = new PlaceSetting(9);
}
}
输出结果:
Custom constructor
Utensil constructor
Spoon constructor
Utensil constructor
Fork constructor
Utensil constructor
kinfe constructor
Plate constructor
DinnerPlate constructor
PlaceSetting constructor
It's rather amazing how cleanly the classes are separated.You don't even need the source code for the methods in order to reuse the code.At most,you just import a package.
Guaranteeing proper cleanup
Consider an example of a computer-aided design system that draws pictures on the screen:
//:reusing/CADSystem.java
//Ensuring proper cleanup.
package reusing;
import static net.mindview.util.Print.*;
class Shape{
Shape(int i){print("Shape constructor");}
void dispose(){print("Shape dispose");}
}
class Circle extends Shape{
Circle(int i){
super(i);
print("Drawing Circle");
}
void dispose(){
print("Erasing Circle");
super.dispose();
}
}
class Triangle extends Shape{
Triangle(int i){
super(i);
print("Drawing Triangle");
}
void dispose(){
print("Erasing Triangle");
super.dispose();
}
}
class Line extends Shape{
private int start,end;
Line(int start,int end){
super(start);
this.start = start;
this.end = end;
print("Drawing Line: " + start + ", " + end);
}
void dispose(){
print("Erasing Line: " + start + ", " + end);
super.dispose();
}
}
public class CADSystem extends Shape{
private Circle c;
private Triangle t;
private Line[] lines = new Line[3];
public CADSystem(int i){
super(i + 1);
for(int j = 0; j < lines.length; j++)
lines[j] = new Line(j,j*j);
c = new Circle(1);
t = new Triangle(1);
print("Combined constructor");
}
public void dispose(){
print("CADSystem.dispose()");
// The order of cleanup is the reverse
// of the order of initialization:
t.dispose();
c.dispose();
for(int i = lines.length - 1; i >= 0; i--)
lines[i].dispose();
super.dispose();
}
public static void main(String[] args){
CADSystem x = new CADSystem(47);
try{
// Code and exception handling...
}finally{
x.dispose();
}
}
}
输出结果:
Shape constructor
Shape constructor
Drawing Line: 0, 0
Shape constructor
Drawing Line: 1, 1
Shape constructor
Drawing Line: 2, 4
Shape constructor
Drawing Circle
Shape constructor
Drawing Triangle
Combined constructor
CADSystem.dispose()
Erasing Triangle
Shape dispose
Erasing Circle
Shape dispose
Erasing Line: 2, 4
Shape dispose
Erasing Line: 1, 1
Shape dispose
Erasing Line: 0, 0
Shape dispose
Shape dispose
(代续)
- 《JAVA编程思想》学习备忘(第237页:Reusing Classes)-3
- 《JAVA编程思想》学习备忘(第237页:Reusing Classes)-1
- 《JAVA编程思想》学习备忘(第237页:Reusing Classes)-2
- 《JAVA编程思想》学习备忘(第237页:Reusing Classes)-4
- 《JAVA编程思想》学习备忘(第237页:Reusing Classes)-5
- 续《JAVA编程思想》学习备忘(第237页:Reusing Classes)-5
- 《JAVA编程思想》学习备忘(p345 Inner Classes-3)
- 《JAVA编程思想》学习备忘(第277页Polymorphism-3)
- 《JAVA编程思想》学习备忘(p345 Inner Classes-1)
- 《JAVA编程思想》学习备忘(p345 Inner Classes-2)
- 《JAVA编程思想》学习备忘(第93页:Operators--3)
- 《JAVA编程思想》学习备忘(第155页:Initialization & Cleanup)-3
- 《JAVA编程思想》学习备忘(第209页:Access Control)-3
- 《JAVA编程思想》学习备忘(第277页Polymorphism-1)
- 《JAVA编程思想》学习备忘(第277页Polymorphism-2)
- 《JAVA编程思想》学习备忘(第311页Interfaces-1)
- java学习笔记6--Reusing classes
- 《JAVA编程思想》学习备忘(第61页:Everything Is an Object--1)
- 旋转图像时候强迫光滑
- 初识ActiveXObject ,很强大
- 使用JavaScript检测浏览器的相关特性
- 一个初级测试工程师的工作总结
- 软件测试工程师的工作职责
- 《JAVA编程思想》学习备忘(第237页:Reusing Classes)-3
- javascript functions collection
- 一些关于Liferay的使用心得
- 关于setContentPane()和getContentPane()的应用
- ASP三级连动(firefox和IE下通过)!
- Liferay Portal学习笔记(一):安装
- Liferay Portal学习笔记(二):使用CMS
- oracle 连接方式
- C++设计模式之Factory Method