知识大全 谈谈Java中的继承与组合

Posted

篇首语:一知半解的人,多不谦虚;见多识广有本领的人,一定谦虚。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 谈谈Java中的继承与组合相关的知识,希望对你有一定的参考价值。

谈谈Java中的继承与组合  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   继承和组合的概念

  在新类里简单地创建原有类的对象 我们把这种方法叫作 组合 因为新类由现有类的对象合并而成 我们只是简单地重复利用代码的功能 而不是采用它的形式

  第二种方法是创建一个新类 将其作为现有类的一个 类型 我们可以原样采取现有类的形式 并在其中加入新代码 同时不会对现有的类产生影响 这种魔术般的行为叫作 继承 (Inheritance) 涉及的大多数工作都是由编译器完成的 对于面向对象的程序设计 继承 是最重要的基础概念之一 对于组合和继承这两种方法 大多数语法和行为都是类似的(因为它们都要根据现有的类型生成新类型)

   组合也就是一个类的对象是另外一个类的成员 一般的程序都有组合的意味 只不过是基本数据类型是成员变量 下面请看具体的例子

  class Head

  

  Head()

  System out println( head );

  

  

  class Body

  

  Body()

  System out println( body );

  

  

  class Person()

  

  Head h=null;

  Body b=null;

  Person()                                //人是由头和身体组成的 Head和Body的对象是Person的一部分

  

  h=new Head();

  b =new Body();

  

  

   继承作为面向对象的三个重要特性的一个方面 在面向对象的领域有着及其重要的作用 好像没听说哪个面向对象的语言不支持继承

  class Person

  

  private String name=null;

  private int age= ;

  public Person(String n int a)

  

  name=n;

  age=a;

  

  int getAge()

  

  return age;

  

  String getName()

  

  return name;

  

  void getDescription()

  

  System out println( name: +name+ \\t + age: +age);

  

  

  class Student extends Person

  

  private String studno=null;

  public Student(String n String no int a)

  

  super(n a);

  studno=no;

  

  

  说明:Student类中有三个成员变量name age studno和一个方法getDescription();

  注意:子类继承了父类的所有变量和函数 只是子类不能访问父类的private类型的变量和函数 其实privae类型的变量还是继承到子类中的

  

  无论还是继承 都允许我们将子对象置于自己的新类中 大家或许会奇怪两者间的差异 以及到底该如何选择

  如果想利用新类内部一个现有类的特性 而不想使用它的接口 通常应选择组合 也就是说 我们可嵌入一个对象 使自己能用它实现新类的特性 但新类的用户会看到我们已定义的接口 而不是来自嵌入对象的接口 考虑到这种效果 我们需在新类里嵌入现有类的private对象

  有些时候 我们想让类用户直接访问新类的组合 也就是说 需要将成员对象的属性变为public 成员对象会将自身隐藏起来 所以这是一种安全的做法 而且在用户知道我们准备合成一系列组件时 接口就更容易理解 car(汽车)对象便是一个很好的例子

  class Engine

  public void start()

  public void rev()

  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[ ];

  public Door left = new Door()

  right = new Door(); // door

  Car()

  for(int i = ; i < ; i++)

  wheel[i] = new Wheel();

  

  public static void main(String[] args)

  Car car = new Car();

  car left window rollup();

  car wheel[ ] inflate( );

  

   ///:~

  由于汽车的装配是故障分析时需要考虑的一项因素(并非只是基础设计简单的一部分) 所以有助于客户程序员理解如何使用类 而且类创建者的编程复杂程度也会大幅度降低

  如选择继承 就需要取得一个现成的类 并制作它的一个特殊版本 通常 这意味着我们准备使用一个常规用途的类 并根据特定的需求对其进行定制 只需稍加想象 就知道自己不能用一个车辆对象来组合一辆汽车——汽车并不 包含 车辆 相反 它 属于 车辆的一种类别 属于 关系是用继承来表达的 而 包含 关系是用组合来表达的

   protected

  现在我们已理解了继承的概念 protected这个关键字最后终于有了意义 在理想情况下 private成员随时都是 私有 的 任何人不得访问 但在实际应用中 经常想把某些东西深深地藏起来 但同时允许访问衍生类的成员 protected关键字可帮助我们做到这一点 它的意思是 它本身是私有的 但可由从这个类继承的任何东西或者同一个包内的其他任何东西访问 也就是说 Java中的protected会成为进入 友好 状态

  我们采取的最好的做法是保持成员的private状态——无论如何都应保留对基 础的实施细节进行修改的权利 在这一前提下 可通过protected方法允许类的继承者进行受到控制的访问

  import java util *;

  class Villain

  private int i;

  protected int read() return i;

  protected void set(int ii) i = ii;

  public Villain(int ii) i = ii;

  public int value(int m) return m*i;

  

  public class Orc extends Villain

  private int j;

  public Orc(int jj) super(jj); j = jj;

  public void change(int x) set(x);

   ///:~

  可以看到 change()拥有对set()的访问权限 因为它的属性是protected(受到保护的)

   再论合成与继承

cha138/Article/program/Java/hx/201311/26635

相关参考

知识大全 谈谈各种JAVA中的调用程序方式

谈谈各种JAVA中的调用程序方式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  很多书籍都说Ja

知识大全 澄清Java语言接口与继承的本质

澄清Java语言接口与继承的本质  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  计算机学院研二的

知识大全 JAVA 的interface观念 与C++ 多重继承的比较

JAVA的interface观念与C++多重继承的比较  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 java阻塞队列 线程同步合作

  Queue接口与ListSet同一级别都是继承了Collection接口LinkedList实现了Queue接口Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果

知识大全 Java 继承的一个实例

Java继承的一个实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  我们先建立基类BaseCl

知识大全 Java里如何实现多继承

Java里如何实现多继承  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  接口(interface

知识大全 谈谈JAVA的反编译

谈谈JAVA的反编译  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  作者因最近分析一些JAVA程

知识大全 JAVA中用接口实现多继承和多态的方法

JAVA中用接口实现多继承和多态的方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  JAVA里

知识大全 使用内部类让Java实现“多继承”

使用内部类让Java实现“多继承”  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  使用内部类让J

知识大全 谈谈Java加密技术(七)

谈谈Java加密技术(七)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ECC  ECCEll