`
arrowbest
  • 浏览: 7845 次
社区版块
存档分类
最新评论

java继承和组合

 
阅读更多
1.继承和组合的概念
在新类里简单地创建原有类的对象。我们把这种方法叫作“组合”,因为新类由现有类的对象合并而成。我们只是简单地重复利用代码的功能,而不是采用它的形式。
第二种方法是创建一个新类,将其作为现有类的一个“类型”。我们可以原样采取现有类的形式,并在其中加入新代码,同时不会对现有的类产生影响。这种魔术般的行为叫作“继承”(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(汽车)对象便是一个很好的例子:
复制代码
 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中的继承与组合在图形类定义中的应用 在Java编程语言中,继承与组合是面向对象编程(OOP)的两大核心概念。通过继承,一个类可以从另一个类那里继承属性和方法,从而实现代码的复用;而通过组合,则是在类...

    浅析Java中的继承与组合

    在Java编程语言中,继承和组合是两种主要的面向对象设计原则,它们分别代表了类之间的不同关系。本文将深入探讨这两个概念以及它们在实际编程中的应用和选择。 首先,让我们了解一下继承。继承是Java中一种强大的...

    关于Java中的继承和组合的一个错误使用的例子

    在Java编程中,继承和组合是两种常用的代码复用机制,它们各有特点并适用于不同的场景。这篇文章通过一个错误使用继承和组合的例子,探讨了这两者的区别以及如何避免不当使用带来的问题。 首先,让我们理解什么是...

    《java面向对象程序设计-继承和多态》教案.doc

    面向对象编程是Java的核心特性,本教程主要涵盖了三个关键概念:封装、继承和多态,以及相关的访问修饰符和方法修饰符。 封装是面向对象编程的基础,它涉及到将数据(属性)和操作这些数据的方法(行为)组合在一个...

    如何在Java中消除实现继承和面向接口编程

    本文将深入探讨如何在Java中合理地消除实现继承和面向接口编程中的不当用法,以提高代码的可读性、可维护性和灵活性。 ### 1. 避免过度使用继承 继承在OOP中被用于表示“is-a”关系,即一个类是另一个类的一种特殊...

    Java中类的组合概念

    类的组合与继承不同,它是通过在类定义中嵌入其他类的实例来实现的,这种方式有助于提高代码的可重用性和模块化。 首先,我们来理解Java中类的概念。类是面向对象编程的基本单位,它定义了一组属性(成员变量)和...

    java继承.pdf

    ### Java继承:面向对象编程的核心概念 #### 引言 在Java编程中,**继承**是一种关键机制,它允许创建的新类(子类)继承现有类(父类)的属性和方法,从而实现代码的复用和扩展。本文将深入探讨Java继承的基本...

    java中慎用继承 以及java中的stack的败笔

    然而,如同任何技术一样,Java在设计过程中也存在一些争议和值得探讨的问题,其中之一便是继承的使用。本文将深入讨论Java中继承的优缺点,以及在特定情况下如何避免使用继承,同时探讨`java.util.Stack`类的设计...

    java编写的组合模式例子,建造一个工厂

    通过本案例的学习,我们可以了解到组合模式如何帮助我们在Java中构建层次化的组织结构,并且能够以统一的方式处理单个对象和复合对象。这种方式不仅提高了代码的可扩展性和可维护性,还使得程序结构更加清晰明了。

    java的继承总结.doc

    下面将对Java继承的基本概念、语法格式、继承关系、方法重写、自动转型等进行详细的总结和分析。 一、继承的基本概念 继承是特殊的is-a关系,即子类继承父类,说明子类是一种特殊的父类,并且具有父类所不具有的...

    java组合的算法

    组合模式的核心思想是"has-a"关系,即一个对象包含其他对象,这与继承的"is-a"关系不同。在Java中,我们通常通过接口或抽象类来定义共同的行为,然后由具体类实现这些行为,从而实现部分与整体的解耦。 首先,让...

    【Android进阶】(1)用继承和组合方式自定义控件

    本教程主要探讨如何通过继承和组合的方式来自定义控件,适用于已经有一定Android基础的开发者进行进阶学习。 首先,我们来理解自定义控件的两种基本方法:继承和组合。 1. **继承**: - **基础概念**:在Java或...

    Java语言程序设计:第四章 继承与多态.ppt

    在Java编程语言中,继承和多态是面向对象编程的核心概念,它们极大地提高了代码的复用性和灵活性。在第四章“继承与多态”中,我们深入探讨了这两个主题。 首先,继承允许一个类(子类)从另一个类(父类)继承特性...

    java类的继承详解说明

    Java 类的继承详解说明 Java语言中,继承是面向对象编程的三大特征之一,是一种实现代码复用...继承是指子类继承父类的成员变量和方法,而组合是指一个类包含另一个类的对象。继承更应该叫做扩展,关键字是 extends。

    java script 继承的实现

    6. **寄生组合式继承**:结合了寄生式继承和组合继承,被认为是 JavaScript 中最理想的继承方式。它通过寄生方式复制父类构造函数的属性,然后使用组合继承来设置子类的原型。 在 "zinherit.js" 文件中,可能实现了...

    Java设计一个银行帐户类(继承与多态)

    在Java编程中,设计一个银行账户类是学习面向对象编程的一个常见练习,它涉及到类的定义、对象的创建以及继承和多态的概念。在这个实验中,我们创建了一个名为`BankCount`的类来代表银行账户,并包含了一系列与账户...

    daima.zip_java 继承 银行

    总的来说,"daima.zip"中的代码示例可能展示了如何利用Java的继承和类的组合来构建一个银行系统。通过这种方式,开发者可以构建出层次清晰、功能丰富的代码结构,便于理解和维护,同时满足业务需求的扩展。通过学习...

    Java继承机制详解:构建可复用的代码架构

    继承是Java中实现代码复用和建立类层次结构的重要机制。通过继承,我们可以创建新的类,这些类继承了父类的属性和方法,同时还可以提供特定...通过理解继承、组合和多态性,我们可以构建出更加灵活、可维护的代码架构。

    java实现计算圆锥体的表面积和体积(实验文档)

    Java 实现计算圆锥体的表面积和体积 Java 是一种面向对象的编程语言,广泛应用...本文详细介绍了如何使用 Java 实现计算圆锥体的表面积和体积,包括 Java 中的接口和实现、包机制、继承和多态、常用包和关键字等内容。

    关于两点三点的坐标描述Java Eclipse 继承的练习

    这时候,你可以通过继承、组合和多态等面向对象的编程技巧来构建更复杂的结构和算法。 总结来说,这个练习主要涉及了以下几个知识点: 1. 坐标系统的概念和表示。 2. Java类的定义和实例化。 3. 类的继承和多态性。...

Global site tag (gtag.js) - Google Analytics