Как утверждение 3 ложно, а 4 верно - PullRequest
1 голос
/ 26 февраля 2020
class Vehical{}

public class Car extends Vehical {
    public static void main(String[] args) {

        Vehical v = new Vehical();
        Car c = new Car();

        boolean is =  v instanceof Vehical;
        System.out.println("is v instanceof Vehical class - "+is);

        is = c instanceof Car;
        System.out.println("is c instanceof of Car class - "+is);

        is = v instanceof Car;
        System.out.println("is v instanceof of Car class - "+is);

        is = c instanceof Vehical;
        System.out.println("is c instanceof of Vehical class - "+is);
    }
}

Ответы [ 2 ]

1 голос
/ 26 февраля 2020

Потому что v - это (бетон) Vehical (думаю, вы имеете в виду транспортное средство).

Но «конкретный» экземпляр Vehical - это не Car. Это (неопределенный c) экземпляр Vehical. Таким образом, v instanceof Car - это false.

Но c - это конкретный экземпляр Car, и поскольку Car подкласс Vehical c также является Vehical, потому что все экземпляры Car также являются экземплярами Vehical. Так что c instanceof Vehical - это true, потому что (в вашей модели) все 'Car' также являются `Vehical's (неявно по наследству).

Вы можете сделать Vehical абстрактным классом, если вы не хотите экземпляров из Vehical существуют, которые не являются более конкретным c типом Vehical (например, Car, Motorbike ?, Lorry?). В реальном мире никогда не может быть транспортного средства, которое не является специфическим c видом транспортного средства.

Ерунда: Что ты водишь? Я вожу автомобиль. Какой автомобиль? Никакого конкретного вида, это просто транспортное средство!

Рекомендованной моделью было бы объявить interface с именем Vehical и реализовать его для каждого (более) конкретного типа Vehical, потому что это наследование Модель может быть сложна в управлении. Но то, что вы сделали, действительно.

1 голос
/ 26 февраля 2020
Vehicle не является Car, поскольку является родительским для Car. Car - это реализация Vehicle, поэтому Car is Vehicle.

Подробнее можно прочитать здесь: https://www.tutorialspoint.com/What-is-Is-a-relationship-in-Java

...