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);
   }}

这将产生以下结果:

truetruetrue

既然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);
   }}

这将产生以下结果:

truetruetrue

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要摆脱多重继承是不可能的。


你可能感兴趣的:(java,继承)