问题:
在java中的继承概念中,我读到了在java中使用继承的各种优点,其中我遇到了一种称为传递性的优点。 现在我看了google找到transitive的含义,其中我得到的意思是“它是一个关系,它适用于序列的连续成员之间,它也必须适用于按顺序排列的任何两个成员之间。例如,如果A如果B大于B,B大于C,则A大于C“。 我理解其含义,但无法在传递一词和继承概念之间建立直接联系。
是否有任何解释,以更明确的方式理解这一点?
答案 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
中的方法并可以覆盖它们。如果gasAmount
和name
为protected
,则子类(在本例中为Truck
)将能够查看和访问它们。
让我们更进一步,Truck
,更具体一点,可以描述几辆卡车,例如自卸卡车,所以:
public class DumpTruck extends Truck