Upcast в Java Разница - PullRequest
       9

Upcast в Java Разница

2 голосов
/ 15 февраля 2020
class A {
}

class B extends A {
}

class Main {
    public static void main(String[] args) {

        B b1 = new B();
        B b2 = new B();

        A a = b1;
        A c = (A) b2;
    }
}

Есть ли разница между a и c? b1 имеет прямую ссылку, а b2 преобразуется в A, а затем ссылается на c типа A.

Ответы [ 2 ]

4 голосов
/ 15 февраля 2020

Там нет необходимости для актеров там. В контексте присваивания допускается расширение справочного преобразования . Нет необходимости в контексте приведения. (Теперь, если бы это было сужающее ссылочное преобразование, вам бы пришлось сделать это явно.)

2 голосов
/ 15 февраля 2020

Приведение является избыточным. b2 присваивается c независимо, и при вызове любых методов к нему будут вызываться методы B, если они существуют.

...