继承概念中的传递性

时间:2018-02-21 13:15:59

标签: java inheritance

问题:

在java中的继承概念中,我读到了在java中使用继承的各种优点,其中我遇到了一种称为传递性的优点。 现在我看了google找到transitive的含义,其中我得到的意思是“它是一个关系,它适用于序列的连续成员之间,它也必须适用于按顺序排列的任何两个成员之间。例如,如果A如果B大于B,B大于C,则A大于C“。 我理解其含义,但无法在传递一词和继承概念之间建立直接联系。

是否有任何解释,以更明确的方式理解这一点?

2 个答案:

答案 0 :(得分:1)

如果是一辆Porche IS-A汽车,还有一辆汽车IS-A汽车那么一辆Porche IS-A汽车。

编辑 - 根据要求,这里有一些代码来证明这一点。 public class Automobile { private int fuel = 0; public void giveFuel(int amount) { fuel += amount; } } public class Car extends Automobile { } public class Porche extends Car { }
所以现在我可以做到: Automobile auto = new Automobile();
auto.giveFuel(5);

但我甚至可以这样做:
Porche porche = new Porche();
porche.giveFuel(5);

如果某个功能需要汽车: public class Person { private Automobile ride = 0; public void setRide(Automobile ride) { this.ride = ride; } }
我能做到:
Porche porche = new Porche();
Person person = new Person()
person.setRide(porche);

如果子类覆盖超类的函数,这将使它们的行为有点不同,这尤其有用。因此,每个Car子类可能有一个不同的drive()方法,它需要不同的燃料量(Car本身可能是抽象的),当Person想要使用他们的汽车时,他会调用ride.drive()并且正确的数量将采取燃料。

答案 1 :(得分:0)

您经常会看到继承被描述为is-a关系。

例如,让我们以车辆为例,现在它是一个抽象术语,它可能意味着几件事,因此在我们的代码中,使vehicle成为abstract class是有意义的。

public abstract class Vehicle {
     private String name;
     private int gasAmount;

     //constructors, getters etc...

     public abstract void start();
     public abstract void drive();
     // other methods
}

public class Truck extends Vehicle
{    
   public Truck(string name, int gas){
         :super(name,gas)
   }

   @Override
   public void drive(){}

   @Override
   public void start(){}

} 

卡车是一种车辆,因此它会发现Vehicle中的方法并可以覆盖它们。如果gasAmountnameprotected,则子类(在本例中为Truck)将能够查看和访问它们。

让我们更进一步,Truck,更具体一点,可以描述几辆卡车,例如自卸卡车,所以:

public class DumpTruck extends Truck