转载

Java继承

   

继承可以被定义为其中一个对象获取的另一个特征的过程。使用继承的信息是在一个等级秩序作出管理。

当我们谈到继承,最常用的关键字是extends和implements。这些话会确定一个对象是否IS-A类型的另一个。通过使用这些关键字,我们可以使一个对象获得另一个对象的属性。

IS-A 关系:

IS-A(是一个)是一种表达:这个对象是一个类型的对象。让我们来看看如何使用extends关键字来实现继承。

 public class Animal{ }  public class Mammal extends Animal{ }  public class Reptile extends Animal{ }  public class Dog extends Mammal{ }

现在,根据上面的例子中,在面向对象的术语中,满足下列条件:

  • 动物是哺乳动物类的超类。

  • 动物是爬虫类的超类。

  • 哺乳动物和爬行动物是动物类的子类。

  • 狗是哺乳动物双方和动物类的子类。

现在,如果我们考虑了IS-A关系,我们可以说:

  • 哺乳动物IS-A 动物

  • 爬行动物IS-A的动物

  • 狗IS-A哺乳动物

  • 因此:狗IS-A动物

使用extends关键字的子类就可以,除了超类的私有属性外,它继承超类的所有属性。

我们可以保证,哺乳动物实际上是与使用实例操作符的动物。

例子:

 public class Dog extends Mammal{     public static void main(String args[]){        Animal a = new Animal();       Mammal m = new Mammal();       Dog d = new Dog();        System.out.println(m instanceof Animal);       System.out.println(d instanceof Mammal);       System.out.println(d instanceof Animal);    } }

这将产生以下结果:

 true true true

既然extends关键字让我们研究如何使用implements关键字来获得对IS-A关系有很好的理解。

implements关键字被使用的类从接口继承。接口永远不能凭借它的类进行扩展。

例子:

 public interface Animal {}  public class Mammal implements Animal{ }  public class Dog extends Mammal{ }

instanceof 关键字:

用instanceof操作符检查确定哺乳动物是否实际上是一个动物,而狗实际上是一种动物

 interface Animal{}  class Mammal implements Animal{}  public class Dog extends Mammal{    public static void main(String args[]){        Mammal m = new Mammal();       Dog d = new Dog();        System.out.println(m instanceof Animal);       System.out.println(d instanceof Mammal);       System.out.println(d instanceof Animal);    } } 

这将产生以下结果:

 true true true

HAS-A 关系:

这些关系主要是基于使用。这就决定了某一类是否 HAS-A 某一个东西。这种关系有助于​​减少重复代码,以及错误。

让我们研究一个例子:

 public class Vehicle{} public class Speed{} public class Van extends Vehicle{  private Speed sp; } 

这表明,Van类 HAS-A Speed类。通过让飞车一个单独的类,我们不必把属于加速Van 类中的全部代码。这使得它可以重复使用Speed类在多个应用程序。

在面向对象的功能,用户无需理会哪个对象是做实际工作。要做到这一点,Van类隐藏用户的执行细节。所以基本上会发生什么是用户会问Van类来执行某些动作,Van类要么本身做的工作或要求另一个类执行的操作。

要记住的一个非常重要的事实是,Java只支持单一继承。这意味着,一个类不能扩展多个类。因此,以下是非法的:

 public class extends Animal, Mammal{} 

因此,一个类可以实现一个或多个接口。这使得Java要摆脱多重继承是不可能的。

   
正文到此结束
Loading...