Upcasting Downcasting - PullRequest
       4

Upcasting Downcasting

2 голосов
/ 20 сентября 2011

У меня есть родительский класс class A и дочерний класс class C extends A.

A a=new A();
C c=(C)a;

Это дает мне ошибку. Почему?

Также, если мой код

A a=new A();
C c=new C();
c=(C)a;

Это отлично работает.

Теперь, какие методы могут получить мои c переменные .. те, что в С или те, что в классе В?

Ответы [ 5 ]

6 голосов
/ 20 сентября 2011

Это дает вам ошибку, потому что a не экземпляр C - так что вы не можете опустить его. Представьте, если бы это было разрешено - вы могли бы сделать:

Object o = new Object();
FileInputStream fis = (FileInputStream) o;

Что бы вы ожидали, если бы попытались читать из потока? Из какого файла вы ожидаете, что он будет читать?

Теперь для второй части:

A a=new A();
C c=new C();
C c=(C)a;

Это будет не нормально работать - для начала он даже не скомпилируется, так как вы объявляете одну и ту же переменную (c) дважды; если вы исправите эту ошибку, вы все равно получите исключение при попытке привести экземпляр A к C.

Однако этот код действительно действителен:

A a = new C(); // Actually creates an instance of C
C c = (C) a; // Checks that a refers to an instance of C - it does, so it's fine
2 голосов
/ 23 декабря 2013

Вот хорошее видео на YouTube http://www.youtube.com/watch?v=jpFij6RD7CA, которое демонстрирует то же самое. Ниже приводится полная текстовая информация для того же.

«Upcasting» означает перемещение объекта подкласса в объект родительского класса. «DownCasting» противоположен «Upcasting» перемещению родительского объекта к дочернему объекту.

enter image description here

«Upcasting» совершенно допустим, но «Downcasting» не разрешен в .NET. Например, ниже приведен простой родительский класс «Клиент», который затем наследуется дочерним классом «GoldCustomer».

class Customer
{

}

class GoldCustomer : Customer
{

}

Ниже приведен код «upcasting», в котором дочерний родительский класс с золотым клиентом выталкивается в класс клиентов.

Customer obj = new GoldCustomer(); 

Ниже приведен пример кода «downcasting», в котором объект родительского класса пытается переместиться в объект дочернего класса, это не разрешено в .NET.

GoldCustomer obj = new Customer(); // not allowed illegal
1 голос
/ 17 февраля 2014

В Java есть концепция, что без апскейтинга вы не сможете выполнить апгрейд

A a = new A ();C c = (C) a;

в этом случае вы пытаетесь выполнить downcast без outcasting

0 голосов
/ 10 августа 2013

При создании объектов нам нужно помнить, что - это отношение к экземплярам.Как в вашем примере C - это A , но A - это не C .

Так что в вашем случае A a = new A ();C c = (C) a;// classCasteException происходит.

Я думаю, что это может помочь вам.

0 голосов
/ 20 сентября 2011

A не является подклассом C, поэтому вы не можете разыграть его.

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