Java - Как вы upcast и downcast одного и того же объекта - PullRequest
0 голосов
/ 27 февраля 2019

Скажем, у нас есть два класса.

class Animal{/*code*/}
class Cat extends Animal{/*code*/}

Из того, что я узнал, апскейтинг и опускание работает следующим образом

Cat c1 = new Cat();
Animal a = c1; //Upcasted to Animal
Cat c2 = (cat) a; //Downcasted back to Cat

Но единственная проблема заключается в том, что каждый раз, когда вы поднимаете или опускаете, вы создаете новый Объект,Есть ли какой-либо способ повысить или понизить объект от Cat до Animal и обратно до Cat, чтобы был приведен только один объект?Например

Cat c --> Animal c --> Cat c //Upcasted to Animal, and downcasted back to Cat, but done all on one object.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Только один объект создается в памяти, и есть три ссылки на этот один объект.Следует отметить, что ссылка типа Animal не будет иметь доступа к чему-либо определенному для типа Cat.Читайте о полиморфизме, если хотите узнать больше.

Здесь важно отметить, что если вы что-то измените в этом объекте, это будет отражено в любой из ссылок.Это продемонстрировано ниже.Предположим, что существует абстрактный класс Animal, который имеет name и соответствующий метод получения и установки.

Обратите внимание, что даже если setName() вызывается для переменной cat, имя все равно изменяется, когдазвонить getName() на animal.

        Cat cat = new Cat("foo");
        Animal animal = cat;
        System.out.println(animal.getName()); // foo
        cat.setName("bar");
        System.out.println(animal.getName()); // bar  <--  The name of animal changed when we changed cat1.

0 голосов
/ 27 февраля 2019

Эти 3 строки создают только один объект в куче и 3 ссылки , которые указывают на тот же объект

Cat c1 = new Cat(); //this is where object is created in heap
Animal a = c1; //Upcasted to Animal, only reference is created not new object
Cat c2 = (cat) a; //Downcasted back to Cat, only reference is created not new object

Вы можете запустить отладчик и проверить, что эти ссылки указывают на оченьтот же объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...