2011-02-03 3 views
1
  1. Может ли переменная подкласса быть перенесена в любой из ее суперклассов?
  2. Может ли переменная суперкласса присваиваться любой переменной подкласса?
  3. Можно ли присвоить суперклассу любую переменную?
  4. Если да, может ли переменная интерфейса назначаться переменная из любого класса реализации?
+3

Вы должны сделать четкое различие между понятием переменной и значением. Как и сейчас, ваш вопрос очень запутан. –

+0

Возможно, вы захотите ознакомиться с противоречивой или ковариацией, поскольку ответ изменится, если вы слегка измените свой вопрос. Вы можете получить приблизительную идею, где это будет другой ответ, прочитав это: http://stackoverflow.com/questions/1184295/java-covariance-question –

ответ

7
  • Да
  • Вы можете назначить экземпляр подкласс к суперкласса переменной
  • Хух?
  • Вы можете назначить экземпляр класса переменной любого типа интерфейса, что класс реализует
+0

Я думаю, что суперклас не может быть назначен переменной _any_, только один из совместимых типов , –

+1

Второй вопрос: если экземпляр * суперкласс * может быть назначен переменной * подкласса *, и ответ на это окончательно * no *. –

+0

@Mark: Вопрос непонятен. Я оптимистично выбрал интерпретацию, которая имеет положительный ответ. – SLaks

3

Просто для наглядности, рассмотрим:

class A extends B implements C { } 

Где A является подклассом, B является суперклассом, а C - это интерфейс, который реализует A.

  1. Подкласс может быть отнесен к любому суперклассу.

    B b = new A(); 
    
  2. родительского класс не может быть брошен вниз к любому подклассу (это является необоснованным, поскольку подклассы могут иметь возможности суперкласс не делает). Вы не можете сделать:

    A a = new B(); // invalid! 
    
  3. родительский класс может быть присвоен любой переменной соответствующего типа.

    A q = new A(); // sure, any variable q or otherwise... 
    
  4. класс может быть присвоен переменной типа одного из своих реализованных интерфейсов.

    C c = new A(); 
    
0

Может переменная подкласс должен быть приведен к любому его суперкласса?

Да

И может быть суперкласс переменной присвоить любой переменный подкласс?

Да

Может суперкласс быть назначен любой переменной?

Да

Если это так, может быть переменный интерфейс присваивается переменным из любого реализующего класса?

Да

+0

вы не можете назначить экземпляр суперкласса переменной подкласса. –

+0

@Mark Возможно, я неправильно понял вопрос. Разве это не означает, что «переменной суперкласса присваивается переменная подкласса»? например ArrayList myArrayList = ...; Список myList = myArrayList – earldouglas

10

ли все собаки также животные?

Все ли животные также собаки?

Если вам нужно животное, и я даю вам собаку, это всегда приемлемо?

Если вам нужна собака конкретно, но я даю вам какое-нибудь животное, может это когда-нибудь быть проблематичным?

Если вам нужно что-то, что вы можете водить, но вам все равно, что это такое, если у него есть такие методы, как: Ускорение и .Steer, вам все равно, если это Porsche или скорая помощь?

0

Да, это обычно основная идея: polymorphism.

Предположим, у вас есть некоторые фигуры: круг, квадрат, треугольник. У вас было бы:

class Shape { ... } 

class Circle extends Shape { ... } 

class Square extends Shape { ... } 

class Triangle extends Shape { ... } 

Идея наследования заключается в том, что круг - это форма. Так что вы можете сделать:

Shape x = ...; 
Point p = x.getCenterPosition(); 

Вам не нужно заботиться о том, каких конкретном типе переменной x есть.

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