java 中组合与复用_java 复用代码(组合与继承)

本文探讨了Java编程中复用代码的两种主要方法:组合和继承。组合是通过在新类中创建现有类的对象来实现,而继承则是通过创建新类并扩展已有类的功能。文中强调了在何时选择组合或继承的原则,指出继承适用于'is-a'关系,而组合适合'has-a'关系。在设计时,应谨慎使用继承,避免不必要的代码耦合。同时,文章提供了一个汽车类的例子,说明如何使用组合来构造新类,并讨论了成员对象的可见性对设计的影响。
摘要由CSDN通过智能技术生成

java中的类都是围绕着类进行的。能够经过建立新类来复用代码,而没必要从头编写。可使用别人已经开发并调试好的类。此方法使用的窍门在于使用类而不破坏现有的程序代码。达到这一目的的方法有两种。第一种方法很是直观:在新类中建立现有类的对象,经过现有类的对象调用其中的成员,来达到复用代码的目的。因为新类是由现有类的对象所组成的,因此这种方式称为组合。该方式只是复用了现有程序的代码,而并不是它的形式。java

第二种方法则更细致一些,它按照现有类的类型来建立新类。在新类中无需改变现本身的形式,而是采用现有类的形式并在其中添加代码。这种神奇的方式称为继承,并且编译器能够完成大部分工做。继承是面向对象程序设计的基石之一。程序员

组合和继承之间的选择编程

组合和继承都也许在新类中放置子对象,组合是显示的这样作,而继承则是隐式的这样作。两者之间的区别何在,以及怎样选择呢?安全

组合技术一般用于想在新类中使用现有类的功能而非它的接口的形式。即,在新类中嵌入某个对象,让其实现所须要的功能,但新类用户看到的只是为新类所定义的接口,而非嵌入对象的接口。为取得此效果,须要在新类中嵌入一个现有类的private对象。工具

有时,也许类的用户直接访问类的组成部分是极具意义的;也就是说,将成员对象声明为public。若是成员对象自身都隐藏了具体的实现,那么这样作是安全的。当用户可以了解到你正在组装一组部件时,会使得端口更加易于理解。car对象即为一个很好的例子:学习

//发动机

class Engine {

public void start(){}

public void stop(){}

}

//车轮

class Wheel {

public void start(){}

public void stop(){}

}

//车门

class Door{

public void open(){}

public void close(){}

}

class Car {

Engine engine=new Engine();

Wheel [] wheel =new Wheel [4];

Door[] door=new Door[4];

pulbic void run(){

//具体实现

}

}      设计

上面的例子只是咱们分析问题的一部分,不是具体的底层实现,因此咱们使Car中的成员声明为public,这将有助于客户端程序员了解怎样去使用类,并且也下降了类开发者所面临的代码复杂度。但务必要记住,这仅仅只是一个特例,通常状况下应该使域成为private。调试

在继承的时候,使用某个现有类,并开发出它的一个特殊版本。一般,这意味着你在使用一个通用类,并为了某种特殊须要而将其特殊化。略微思考一下就会发现,用一个"交通工具"对象去构成一部"车子"是毫无心义的,由于"车子"不包括"交通工具","车子"仅仅是"交通工具"的一种(is-a)。is-a(是一个)用来表示继承关系,而has-a(有一个)用来表示组合关系。code

在面向对象中编程中,生成和使用程序代码最有可能采用的方法就是直接将数据和方法包装进一个类中,并使用该类的对像。也可使用组合技术使用现有类来开发新的类。而继承技术实际上是不太经常使用的。尽管咱们在学习OOP的过程当中屡次强调继承,但这不意味着要尽量的使用它。相反,应当谨慎使用这一技术,使其使用场合仅限于你确信该使用这一技术的状况下。那到底该使用组合仍是继承?一个最清晰的判断方法就是问一问你本身是否要重新类型向基类向上转型。须要的话继承则是必须的,若是不需那应当好好考虑是否使用继承。对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值