2016-06-15 3 views
-3

Что означает это утверждение:Создать объект в Java

B b = new C(); 

Означает ли это, что б является объектом класса В и С, в то же время? Может ли кто-нибудь прояснить это подробно.

Я знаю

B b = new B(); 

при создании объекта из класса B, но я не знаю, что это утверждение означает,

B b = new C(); 
+0

Итак, b является объектом из суперкласса B? –

+1

C является подклассом класса B. Например. Ferrari будет подклассом Car, так как это тип автомобиля. Точно так же C здесь является типом B. Переменная b позволяет вам создавать C, но только для доступа к ее методам и т. Д. Через интерфейс класса B. Представьте себе, что автомобиль имеет начало(), stop(), ускорение() и замедление(). У Ferrari также были бы эти методы, но он также может добавить метод igniteTurbo(). Делая это, «Car car = new Ferrari();», он позволяет нам создавать объект Ferrari, но разрешать доступ только к первым четырем методам, а не к методу igniteTurbo(). – ManoDestra

+0

Мы также можем создать «Список list = new ArrayList <>();' который позволит нам обрабатывать несколько типов автомобилей в том же списке по принципу полиморфизма. Каждый автомобиль может реализовать свои базовые методы по-разному, но мы можем назвать их через одну и ту же сигнатуру интерфейса. – ManoDestra

ответ

1
B b = new C(); 

Это означает, что ссылка B типа относится к примеру C. Класс C является подклассом B. В этом случае вы можете использовать методы, определенные в классе B, используя переопределенные версии этих методов в классе A (если такие методы существуют). Этот механизм называется полиморфизмом .

Представьте, у вас есть два подкласса класса B, например A и C. Вы напишете общую реализацию в методах родительского класса. Затем вы переопределите поведение некоторых методов в дочернем классе, чтобы сделать их более конкретными.

B b1 = new A(); 
B b2 = new C(); 
// the same type of references 

b1.performAction(); 
b2.performAction(); 
// the same methods, but the different code will be executed 
// if the methods are overridden in the childs 
3

В этом утверждении, C явно имеет «Isa» отношения с B - т.е. B либо предком C «с или интерфейс, который реализует C.

Другими словами, у вас есть один из

class B { ... } 
class C extends B [ ... } 

или

interface B { ... } 
class C implements B { ... } 

, где также могут быть комбинации этих и B и C может быть более чем один шаг наследования друг от друга, например,

class B { ... } 
class X extends B { ... } 
class C extends X { ... } 

Вы создаете код C экземпляр и присвоение ему переменной типа B, то есть вы сможете использовать только методы, видимые через B (без явного литья, по крайней мере).

+0

Хорошо, спасибо вам большое за вашу помощь. , –

+0

@Mureinik Мне не очень ясно, что B является предком C - это может быть интерфейс тоже ... – Betlista

+1

@Betlista достаточно справедливо, это было не самое лучшее выражение с моей стороны. Я отредактировал ответ, чтобы улучшить формулировку, спасибо! – Mureinik

Смежные вопросы