1.继承和组合的概念
在新类里简单地创建原有类的对象。我们把这种方法叫作“组合”,因为新类由现有类的对象合并而成。我们只是简单地重复利用代码的功能,而不是采用它的形式。
第二种方法是创建一个新类,将其作为现有类的一个“类型”。我们可以原样采取现有类的形式,并在其中加入新代码,同时不会对现有的类产生影响。这种魔术般的行为叫作“继承”(Inheritance),涉及的大多数工作都是由编译器完成的。对于面向对象的程序设计,“继承”是最重要的基础概念之一。对于组合和继承这两种方法,大多数语法和行为都是类似的(因为它们都要根据现有的类型生成新类型)。
第二种方法是创建一个新类,将其作为现有类的一个“类型”。我们可以原样采取现有类的形式,并在其中加入新代码,同时不会对现有的类产生影响。这种魔术般的行为叫作“继承”(Inheritance),涉及的大多数工作都是由编译器完成的。对于面向对象的程序设计,“继承”是最重要的基础概念之一。对于组合和继承这两种方法,大多数语法和行为都是类似的(因为它们都要根据现有的类型生成新类型)。
2.组合也就是一个类的对象是另外一个类的成员,一般的程序都有组合的意味,只不过是基本数据类型是成员变量,下面请看具体的例子
1 class Head 2 { 3 Head(){ 4 System.out.println(" head "); 5 } 6 } 7 class Body 8 { 9 Body(){ 10 System.out.println(" body "); 11 } 12 } 13 class Person() 14 { 15 Head h=null; 16 Body b=null; 17 Person() //人是由头和身体组成的,Head和Body的对象是Person的一部分 18 { 19 h=new Head(); 20 b =new Body(); 21 } 22 23 } 24
3.继承作为面向对象的三个重要特性的一个方面,在面向对象的领域有着及其重要的作用,好像没听说哪个面向对象的语言不支持继承
1 class Person 2 { 3 private String name = null; 4 private int age = 0; 5 6 public Person(String n, int a) 7 { 8 name = n; 9 age = a; 10 } 11 12 int getAge() 13 { 14 return age; 15 } 16 17 String getName() 18 { 19 return name; 20 } 21 22 void getDescription() 23 { 24 System.out.println("name: " + name + "/t" + "age: " + age); 25 } 26 } 27 28 class Student extends Person 29 { 30 private String studno = null; 31 32 public Student(String n, String no, int a) 33 { 34 super(n, a); 35 studno = no; 36 } 37 }
说明:Student类中有三个成员变量name,age,studno和一个方法getDescription();
注意:子类继承了父类的所有变量和函数,只是子类不能访问父类的private类型的变量和函数,其实privae类型的变量还是继承到子类中的
4.
无论还是继承,都允许我们将子对象置于自己的新类中。大家或许会奇怪两者间的差异,以及到底该如何选择。
如果想利用新类内部一个现有类的特性,而不想使用它的接口,通常应选择组合。也就是说,我们可嵌入一个对象,使自己能用它实现新类的特性。但新类的用户会看到我们已定义的接口,而不是来自嵌入对象的接口。考虑到这种效果,我们需在新类里嵌入现有类的private对象。
有些时候,我们想让类用户直接访问新类的组合。也就是说,需要将成员对象的属性变为public。成员对象会将自身隐藏起来,所以这是一种安全的做法。而且在用户知道我们准备合成一系列组件时,接口就更容易理解。car(汽车)对象便是一个很好的例子:
如果想利用新类内部一个现有类的特性,而不想使用它的接口,通常应选择组合。也就是说,我们可嵌入一个对象,使自己能用它实现新类的特性。但新类的用户会看到我们已定义的接口,而不是来自嵌入对象的接口。考虑到这种效果,我们需在新类里嵌入现有类的private对象。
有些时候,我们想让类用户直接访问新类的组合。也就是说,需要将成员对象的属性变为public。成员对象会将自身隐藏起来,所以这是一种安全的做法。而且在用户知道我们准备合成一系列组件时,接口就更容易理解。car(汽车)对象便是一个很好的例子:
1 class Engine 2 { 3 public void start() 4 { 5 } 6 7 public void rev() 8 { 9 } 10 11 public void stop() 12 { 13 } 14 } 15 16 class Wheel 17 { 18 public void inflate(int psi) 19 { 20 } 21 } 22 23 class Window 24 { 25 public void rollup() 26 { 27 } 28 29 public void rolldown() 30 { 31 } 32 } 33 34 class Door 35 { 36 public Window window = new Window(); 37 38 public void open() 39 { 40 } 41 42 public void close() 43 { 44 } 45 } 46 47 public class Car 48 { 49 public Engine engine = new Engine(); 50 public Wheel[] wheel = new Wheel[4]; 51 public Door left = new Door(), right = new Door(); // 2-door 52 53 Car() 54 { 55 for (int i = 0; i < 4; i++) 56 wheel[i] = new Wheel(); 57 } 58 59 public static void main(String[] args) 60 { 61 Car car = new Car(); 62 car.left.window.rollup(); 63 car.wheel[0].inflate(72); 64 } 65 } // /:~
由于汽车的装配是故障分析时需要考虑的一项因素(并非只是基础设计简单的一部分),所以有助于客户程序员理解如何使用类,而且类创建者的编程复杂程度也会大幅度降低。
如选择继承,就需要取得一个现成的类,并制作它的一个特殊版本。通常,这意味着我们准备使用一个常规用途的类,并根据特定的需求对其进行定制。只需稍加想象,就知道自己不能用一个车辆对象来组合一辆汽车——汽车并不“包含”车辆;相反,它“属于”车辆的一种类别。“属于”关系是用继承来表达的,而“包含”关系是用组合来表达的。
相关推荐
### Java中的继承与组合在图形类定义中的应用 在Java编程语言中,继承与组合是面向对象编程(OOP)的两大核心概念。通过继承,一个类可以从另一个类那里继承属性和方法,从而实现代码的复用;而通过组合,则是在类...
在Java编程语言中,继承和组合是两种主要的面向对象设计原则,它们分别代表了类之间的不同关系。本文将深入探讨这两个概念以及它们在实际编程中的应用和选择。 首先,让我们了解一下继承。继承是Java中一种强大的...
在Java编程中,继承和组合是两种常用的代码复用机制,它们各有特点并适用于不同的场景。这篇文章通过一个错误使用继承和组合的例子,探讨了这两者的区别以及如何避免不当使用带来的问题。 首先,让我们理解什么是...
面向对象编程是Java的核心特性,本教程主要涵盖了三个关键概念:封装、继承和多态,以及相关的访问修饰符和方法修饰符。 封装是面向对象编程的基础,它涉及到将数据(属性)和操作这些数据的方法(行为)组合在一个...
本文将深入探讨如何在Java中合理地消除实现继承和面向接口编程中的不当用法,以提高代码的可读性、可维护性和灵活性。 ### 1. 避免过度使用继承 继承在OOP中被用于表示“is-a”关系,即一个类是另一个类的一种特殊...
类的组合与继承不同,它是通过在类定义中嵌入其他类的实例来实现的,这种方式有助于提高代码的可重用性和模块化。 首先,我们来理解Java中类的概念。类是面向对象编程的基本单位,它定义了一组属性(成员变量)和...
### Java继承:面向对象编程的核心概念 #### 引言 在Java编程中,**继承**是一种关键机制,它允许创建的新类(子类)继承现有类(父类)的属性和方法,从而实现代码的复用和扩展。本文将深入探讨Java继承的基本...
然而,如同任何技术一样,Java在设计过程中也存在一些争议和值得探讨的问题,其中之一便是继承的使用。本文将深入讨论Java中继承的优缺点,以及在特定情况下如何避免使用继承,同时探讨`java.util.Stack`类的设计...
通过本案例的学习,我们可以了解到组合模式如何帮助我们在Java中构建层次化的组织结构,并且能够以统一的方式处理单个对象和复合对象。这种方式不仅提高了代码的可扩展性和可维护性,还使得程序结构更加清晰明了。
下面将对Java继承的基本概念、语法格式、继承关系、方法重写、自动转型等进行详细的总结和分析。 一、继承的基本概念 继承是特殊的is-a关系,即子类继承父类,说明子类是一种特殊的父类,并且具有父类所不具有的...
组合模式的核心思想是"has-a"关系,即一个对象包含其他对象,这与继承的"is-a"关系不同。在Java中,我们通常通过接口或抽象类来定义共同的行为,然后由具体类实现这些行为,从而实现部分与整体的解耦。 首先,让...
本教程主要探讨如何通过继承和组合的方式来自定义控件,适用于已经有一定Android基础的开发者进行进阶学习。 首先,我们来理解自定义控件的两种基本方法:继承和组合。 1. **继承**: - **基础概念**:在Java或...
在Java编程语言中,继承和多态是面向对象编程的核心概念,它们极大地提高了代码的复用性和灵活性。在第四章“继承与多态”中,我们深入探讨了这两个主题。 首先,继承允许一个类(子类)从另一个类(父类)继承特性...
Java 类的继承详解说明 Java语言中,继承是面向对象编程的三大特征之一,是一种实现代码复用...继承是指子类继承父类的成员变量和方法,而组合是指一个类包含另一个类的对象。继承更应该叫做扩展,关键字是 extends。
6. **寄生组合式继承**:结合了寄生式继承和组合继承,被认为是 JavaScript 中最理想的继承方式。它通过寄生方式复制父类构造函数的属性,然后使用组合继承来设置子类的原型。 在 "zinherit.js" 文件中,可能实现了...
在Java编程中,设计一个银行账户类是学习面向对象编程的一个常见练习,它涉及到类的定义、对象的创建以及继承和多态的概念。在这个实验中,我们创建了一个名为`BankCount`的类来代表银行账户,并包含了一系列与账户...
总的来说,"daima.zip"中的代码示例可能展示了如何利用Java的继承和类的组合来构建一个银行系统。通过这种方式,开发者可以构建出层次清晰、功能丰富的代码结构,便于理解和维护,同时满足业务需求的扩展。通过学习...
继承是Java中实现代码复用和建立类层次结构的重要机制。通过继承,我们可以创建新的类,这些类继承了父类的属性和方法,同时还可以提供特定...通过理解继承、组合和多态性,我们可以构建出更加灵活、可维护的代码架构。
Java 实现计算圆锥体的表面积和体积 Java 是一种面向对象的编程语言,广泛应用...本文详细介绍了如何使用 Java 实现计算圆锥体的表面积和体积,包括 Java 中的接口和实现、包机制、继承和多态、常用包和关键字等内容。
这时候,你可以通过继承、组合和多态等面向对象的编程技巧来构建更复杂的结构和算法。 总结来说,这个练习主要涉及了以下几个知识点: 1. 坐标系统的概念和表示。 2. Java类的定义和实例化。 3. 类的继承和多态性。...