java-组合优于继承】的更多相关文章

Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 18. 组合优于继承 继承是实现代码重用的有效方式,但并不总是最好的工具.使用不当,会导致脆弱的软件. 在包中使用继承是安全的,其中子类和父类的实现都在同一个程序员的控制之…
策略模式:第一了算法族,分别封装起来,让他们之间可以互相替换,次模式让算法的变化独立于使用算法的客户. 首先看个错误的面向对象. 假如我们需要写一个关于鸭子的程序,各种类型的鸭子.第一想到的就是建一个Duck接口,然后各种鸭子实现这个接口. interface Duck{ public void quack(); } class MiniDuck implements Duck{ @Override public void quack() { //........ } } 但是如果突然有一天,有…
[程序实例] import java.util.*; class Meal{ Meal() { System.out.println("Meal Constructor"); } } class Bread{ Bread(){ System.out.println("Bread Constructor"); } } class Cheese{ Cheese(){ System.out.println("Cheese Constructor");…
https://stackoverflow.com/questions/49002/prefer-composition-over-inheritance 解答1 Prefer composition over inheritance as it is more malleable / easy to modify later, but do not use a compose-always approach. With composition, it's easy to change beha…
[TOC] 关于Java中的继承和组合的一个错误使用的例子 相信绝大多数人都比较熟悉Java中的「继承」和「组合」这两个东西,本篇文章就主要就这两个话题谈论一下.如果我某些地方写的不对,或者比较幼稚,论证不清晰,欢迎大家留言指正. 什么是「组合」和「继承」 假设有2个class:A和B: 如果class A extends B 那么我们就说A继承B,A是子类,B是父类,这种情况就是继承. 如果A中有一个属性的类型为B,那么我们就说这种情况就是组合. 分别在什么情况下使用 回想一些我们一般会在什么…
//Java中的继承和组合之间的联系和区别 //本例是继承 class Animal { private void beat() { System.out.println("心胀跳动..."); } public void breath() { beat(); System.out.println("吸一口气,吐一口气,呼吸中..."); } } //继承Animal,直接复用父类的breath()方法 class Bird extends Animal { pub…
1.组合和继承之间的选择 组合和继承都允许在新的类中放置子对象,组合是显式的这样做,而继承则是隐式的做. 组合技术通常用于想在新类中使用现有类的功能而非它的接口这种情形.即在新类中嵌入某个对象,让其实现所需要的功能,但新类的用户看到的只是为新类所定义的接口,而非所嵌入对象的接口.为取得此效果,需要在新类中嵌入一个现有类的private对象.但有时,允许类的用户直接访问新类中的组合成分是极具意义的,即将成员对象声明为public.如果成员对象自身都隐藏了具体实现,那么这种做法是安全的.当用户能够了…
阅读英文的能力对于程序员来说,是很重要的.这几年也一直在学习英文,今天心血来潮,就在网上找了一篇简短的博文翻译一下.水平一般,能力有限,还请各位看官多多指点. 译文: 本文将会举例说明Java中继承和组合的概念.首先举一个继承的例子,然后展示一下如何用组合来改善继承的设计.最后概括一下如何在它们之间做出选择. 1. 继承 假设我们有一个Insect类.这个类包含两个方法:一个是move(),一个是attack(). class Insect { private int size; private…
JAVA一个很重要的功能就是代码的可复用性,代码复用可以大大提升编程效率.这里主要介绍两种代码复用方式:组合和继承. 一.组合 组合比较直观,只需在新的类中产生现有类的对象,新的类由现有类的对象组成,因而称之为组合.这种方法只是复用了代码的功能,而不是它的形式. public class Combine{ public static void main(String[] args){ /* 以下两行代码即体现了组合 */ Combine1 com1 = new Combine1(); // 在新…
Java 复用代码的两种方式组合与继承. 组合 组合只需将对象引用置于新类中即可. 比如我们有一个B类,它具有一个say方法,我们在A类中使用B类的方法,就是组合. public class B { public void say(){ } } public class A { public void combo(){ B b = new B(); b.say(); } } 在 java编程思想中,还介绍了四种初始化引用的方式. 1.在定义对象的地方. public class Bath{ pr…
    在阅读Effective Java中的第16条时发现了一个有趣的机制或者说是模式,那就是组合(文中翻译为复用,但是作者认为组合更能体现这种模式的精神),并且文中建议使用组合.  那什么是组合,组合相较于继承的优点在哪里,缺点又有哪些,组合和继承更适合怎样的场景,更重要的是作者在校基础课程的学习中尽然都没有接触到组合这个概念,实在有理由探索一下! 我们分别了解一下组合和继承的概念 组合 组合就是 A类的对象是B类的成员变量.相当于 A类对象是B类对象的一个变量,A类中的所有功能,B类都可以…
用组合取代继承能为 Activity 带来什么 原文链接 : Composition over Inheritance,What it means for your Activities 原文作者 : Josh Brown 译文出自 : 开发技术前线 www.devtf.cn 译者 : chaossss 校对者: Mr.Simple 状态 : 完毕 其实我们在非常多 Java 进阶书籍上看到过"开发时应该更倾向于选择组合而不是继承"的建议,为什么建议我们更倾向于而不是全然取代呢,由于当…
组合和继承.都能实现对类的扩展. 差别例如以下表所看到的 组合 继承 has-a关系 is-a关系 执行期决定 编译期决定 不破坏封装,总体和局部松耦合 破坏封装,子类依赖父类 支持扩展,任意添加组合类 仅仅能继承一个父类,必须包括全部方法,添加系统复杂性 动态选择组合类方法 复用父类方法 以下通过一个样例说明,子类继承必须包括全部父类方法,添加了出错率.改动父类方法会引起全部子类功能变化. /** * 呼叫基类 * * @author peter_wang * @create-time 201…
Java语言的继承 这里简谈Java语言的三大特性之二——继承. Java语言的三大特性是循序渐进的.是有顺序性的,应该按照封装-->继承-->多态这样的顺序依次学习 继承的定义 百度百科中这样定义继承:继承是面向对象最显著的一个特性.它是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力.Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类. 继承的本质是对某一批类的抽象,从而实…
为什么要使用继承? 继承的好处: (1)抽取出了重复的代码,使代码更加灵活 (2)建立了类和类之间的联系 继承的缺点: 耦合性太强 OC中的继承 1.OC中不允许子类和父类拥有相同名称的成员变量名:(java中是可以的) 2.编译器从上往下执行,所以在子类前面至少应该要有父类的声明:如 @interface Worker : Person   @end 3.OC中的子类可以拥有和父类相同名称的方法,在子类调用时,优先去自己的内部寻找,如果父类没有定义该方法,则继续在继承链上查找,直到找到为止,如…
Lifting State Up state提升 对于在React应用程序中更改的任何数据,应该有一个单一的数据源.通常,都是将state添加到需要渲染的组件.如果其他组件也需要它,您可以将其提升到最接近的共同祖先.而不是尝试在不同组件之间同步状态,您应该依赖于自上而下的数据流. 如果一个值可以从props或state拿到(直接或间接),它就不应该保存在state里. Composition vs Inheritance 组件组合或继承 React建议使用组合而不是继承来重用组件之间的代码. 请…
封装 1.概念: 将类的某些信息隐藏在类的内部,不允许外部程序访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: a.只能通过规定的方法访问数据 b.隐藏类的实例细节,方便修改和实现 3.封装的实现步骤 ①修改属性的可见性——设为private ②创建getter/settrer方法,用于属性的读写 ③在getter/setter方法中加入属性控制语句,对属性值的合法性进行判断 继承 继承是类与类的一种关系,例如:动物和狗的关系,动物是父类(或基类),狗是子类(或派生类).…
我们在以前的学习中,我们会了C#中的继承,今天我们来了解了解Java中的继承,其实都大同小异啦! 1.语法 修饰符 SubClass extends SuperClass(){ //类定义部分 } eg:public Dog extends Pet(){ } 我们说Dog继承了Pet 2.那么Dog究竟可以继承Pet类中的什么东西? 01.当这两个类位于同一个包时,Dog类继承Pet类中Public,protected和默认(friendly)访问级别的成员变量和成员方法. 02.当这两个类位于…
继承也是面向对象的又一重要特性,继承是类于类的一种关系,通俗来说狗属于动物类,那么狗这个类就继承了动物类 java中的继承是单继承的,一个类只能继承与一个父类 子类继承父类之后,子类就拥有了父类的所有属性和方法,private的除外,优点就是可以提高代码的复用性,简单的继承实例如下: public class Dog extends Animal { //Dog类继承了Animal类中的所有非私有的属性和方法,可以直接使用了 } 使用继承还是挺简单的 方法重写 如果子类对继承父类的方法不满意,那…
继承就是在一个现有类型的基础上,通过增加新的方法或者重定义已有方法(重写)的方式,产生一个新的类型.继承是面向对 象的三个基本特征--封装.继承.多态的其中之一,我们在使用java时编写的每一个类都是在继承,因为在java语言 中,java.lang.object类是所有类最根本的基类(或者叫父类.超类),如果我们新定义的一个类没有明确地指定继承自哪个基类,那么java 就会默认为它是继承自object类的. 1.为什么需要使用继承? 提高代码的重用性. 提高程序的扩展性. 2.Java继承的语…