黑马程序员_基础复习03_代理、组合和继承
2012-12-12 12:59
405 查看
------- android培训、java培训、期待与您交流!
----------
1、代理
代理是继承和组合之间的中庸之道,我们将一个成员对象置于所构造的类中,又在新类中暴露了该成员对象的所有方法。前者像是组合,后者像是继承。
但是,代理可以好方便的选择成员对象中方法的某个子集。
下面举例说明代理的用法:
public class SpaceShipControls {
void up(int velocity){}
void down(int velocity){}
void left(int velocity){}
void right(int velocity){}
void forward(int velocity){}
void back(int velocity){}
void turboBoost(){}
}
public class SpaceShipDelegation {
private String name;
private SpaceShipControls controls = new SpaceShipControls();
public SpaceShipDelegation(String name){
this.name = name;
}
//代理方法
public void up(int velocity){
controls.up(velocity);
}
public void down(int velocity){
controls.down(velocity);
}
public void left(int velocity){
controls.left(velocity);
}
public void right(int velocity){
controls.right(velocity);
}
public void forward(int velocity){
controls.forward(velocity);
}
public void back(int velocity){
controls.back(velocity);
}
public void turboBoost(){
controls.turboBoost();
}
public static void main(String[] args) {
SpaceShipDelegation protector
= new SpaceShipDelegation("megnmeng");
protector.back(123);
}
}
代理(delegate)(代表、委托):“代理”是类型安全的并且完全面向对象的;
代理三步曲:
a.生成自定义代理类:delegate int mydelegate();
b.然后实例化代理类:mydelegate d = new mydelegate(myclass.mymethod);
c.最后通过实例对象调用方法:int ret = d();
2、组合和继承的区别
组合通常是想在新类中使用现有类的功能而并非它的接口,即在新类中嵌入某个对象,让其实现所需要的功能,一般需要将现有类的对象private。
而继承使用某个现有类,并开发出一个它的特殊版本。即你在使用一个通用类,并为了某种需要而将其特殊化。
”is a“(是一个)的关系式用来描述继承的,比如汽车是一种交通工具,交通工具有某种共性,而汽车有某些特性,我用继承获得共性,并扩展特性。
”has a“(有一个)的关系是用来描述组合的。比如汽车有轮胎、门、窗户,我可以创建轮胎、门、窗户类,在汽车类中嵌入它们,来使用它们的功能,为汽车服务。
下面是组合的例子:
class Engine{
public void start(){}
public void stop(){}
}
class Wheel{
public void inflate(int psi){}
}
class Window{
public void rollup(){}
public void rolldown(){}
}
class Door{
public Window window = new Window();
public void open(){}
public void close(){}
}
public class Car {
public Engine engine = new Engine();
public Wheel[] wheel = new Wheel[4];
public Door left = new Door(),
right = new Door();
public Car(){
for (int i = 0; i < 4; i++) {
wheel[i] = new Wheel();
}
}
public static void main(String[] args) {
Car car = new Car();
car.left .window.rollup();//车的左窗户关上
car.wheel[0].inflate(54);//第一个轮胎打气
}
}
在选择继承和组合的一个通用的原则是:“用继承表达行为间的差异,并用字段表达状态上的变化”。
----------
1、代理
代理是继承和组合之间的中庸之道,我们将一个成员对象置于所构造的类中,又在新类中暴露了该成员对象的所有方法。前者像是组合,后者像是继承。
但是,代理可以好方便的选择成员对象中方法的某个子集。
下面举例说明代理的用法:
public class SpaceShipControls {
void up(int velocity){}
void down(int velocity){}
void left(int velocity){}
void right(int velocity){}
void forward(int velocity){}
void back(int velocity){}
void turboBoost(){}
}
public class SpaceShipDelegation {
private String name;
private SpaceShipControls controls = new SpaceShipControls();
public SpaceShipDelegation(String name){
this.name = name;
}
//代理方法
public void up(int velocity){
controls.up(velocity);
}
public void down(int velocity){
controls.down(velocity);
}
public void left(int velocity){
controls.left(velocity);
}
public void right(int velocity){
controls.right(velocity);
}
public void forward(int velocity){
controls.forward(velocity);
}
public void back(int velocity){
controls.back(velocity);
}
public void turboBoost(){
controls.turboBoost();
}
public static void main(String[] args) {
SpaceShipDelegation protector
= new SpaceShipDelegation("megnmeng");
protector.back(123);
}
}
代理(delegate)(代表、委托):“代理”是类型安全的并且完全面向对象的;
代理三步曲:
a.生成自定义代理类:delegate int mydelegate();
b.然后实例化代理类:mydelegate d = new mydelegate(myclass.mymethod);
c.最后通过实例对象调用方法:int ret = d();
2、组合和继承的区别
组合通常是想在新类中使用现有类的功能而并非它的接口,即在新类中嵌入某个对象,让其实现所需要的功能,一般需要将现有类的对象private。
而继承使用某个现有类,并开发出一个它的特殊版本。即你在使用一个通用类,并为了某种需要而将其特殊化。
”is a“(是一个)的关系式用来描述继承的,比如汽车是一种交通工具,交通工具有某种共性,而汽车有某些特性,我用继承获得共性,并扩展特性。
”has a“(有一个)的关系是用来描述组合的。比如汽车有轮胎、门、窗户,我可以创建轮胎、门、窗户类,在汽车类中嵌入它们,来使用它们的功能,为汽车服务。
下面是组合的例子:
class Engine{
public void start(){}
public void stop(){}
}
class Wheel{
public void inflate(int psi){}
}
class Window{
public void rollup(){}
public void rolldown(){}
}
class Door{
public Window window = new Window();
public void open(){}
public void close(){}
}
public class Car {
public Engine engine = new Engine();
public Wheel[] wheel = new Wheel[4];
public Door left = new Door(),
right = new Door();
public Car(){
for (int i = 0; i < 4; i++) {
wheel[i] = new Wheel();
}
}
public static void main(String[] args) {
Car car = new Car();
car.left .window.rollup();//车的左窗户关上
car.wheel[0].inflate(54);//第一个轮胎打气
}
}
在选择继承和组合的一个通用的原则是:“用继承表达行为间的差异,并用字段表达状态上的变化”。
相关文章推荐
- 黑马程序员--java基础复习继承之抽象类与接口
- 黑马程序员—— Java 基础 面向对象之继承 (复习)
- [Think In Java]基础拾遗1 - 对象初始化、垃圾回收器、继承、组合、代理、接口、抽象类
- 黑马程序员--java基础复习之继承、子父类
- 黑马程序员_5JAVA基础 继承 final的用法以及抽象类的特点
- 黑马程序员——OC基础02—封装、继承、多态
- 【Thinking in Java】组合、继承和代理的区别
- 黑马程序员—java基础复习—异常
- 黑马程序员—java基础复习—集合
- 黑马程序员__java基础__面向对象(继承、接口)
- 黑马程序员---Java基础加强---代理
- 黑马程序员——ObjC基础—协议与代理
- 黑马程序员 JavaSE-03 Java基础语法2:语句
- java入门基础知识(四)(复习)内部类,流,继承
- 黑马程序员 JAVA基础学习笔记 继承等
- 黑马程序员-java基础03
- 黑马程序员——JAVA基础之继承
- 【黑马程序员】方法、数组、面向对象、封装、继承——Java复习笔记
- 黑马程序员-->Java基础加强-->动态代理
- 黑马程序员——Java基础---继承、抽象、接口