2015-10-25 4 views
-2

У меня вопрос о унаследованных классах и List типах. Представьте, что вы создали класс с именем Polygon с некоторыми методами (вычислять периметр, область и т. Д.) И класс Triangle, который расширяет Polygon. В то же время в вашем основном классе вы создали тип List, который сохраняет объекты Polygon. Все принадлежит к одной и той же упаковке.(Java) Типы списков и наследование

Я сомневаюсь, что это следующий: если я создам объект из типа Triangle, могу ли я сохранить его в этом последнем List?

Пример:

Класс Многоугольник

public class Polygon{ 

//All his methods 


} 

класса Треугольник

public class Triangle extends Polygon{ 

//All his methods 

} 

Главный класс

public static void main (String[] args){ 

List<Polygon> listPolygon = new ArrayList <Polygon>(); 
Triangle example = new Triangle(); 

listPolygon.add(example); 

} 

Большое спасибо и извините за мой возможный плохой английский. Сейчас я много тренируюсь.

+1

У вас уже есть код, но вы спрашиваете нас * «могу я» *? Почему бы просто не попробовать? – Tom

+0

@ Тому, мне жаль, Том, если это очевидно, но сейчас я просто учусь, и если это невозможно, я ожидал ответа «нет», после чего следовала статья, объясняющая мне, почему это невозможно, или ответ, предлагающий мне альтернативное решение. – xFunkyTImes

+1

Это не имеет никакого отношения к «если это очевидно». У вас уже есть этот код, но вы его не пробовали? Ни разу? Если вы это сделаете, у вас будет ваш ответ. – Tom

ответ

2

Я не уверен в вашем вопросе.

Если ваш вопрос вы можете сделать это:

List<Polygon> polygonList = new ArrayList<Polygon>(); 
Triangle triangle = new Triangle(); 
polygonList.add(triangle); 

ответ да, потому что Triangle является Polygon.

Если вопрос, то вы можете сделать это:

List<Triangle> triangleList = new ArrayList<Triangle>(); 
List<Polygon> polygonList = triangleList; 

ответ нет, потому что List<Triangle> не List<Polygon>. См. this question для получения более подробной информации.

Если вы используете IDE, например, eclipse или IntelliJ, вы должны быстро узнать, что вы можете или не можете сделать, так как вы получаете полезные сообщения об ошибках.

+0

Вы можете ссылаться на [этот вопрос] (http://stackoverflow.com/questions/2745265/is-listdog-a-subclass-of-listanimal-why-arent-javas-generics-implicitly-p), если OP любопытно почему второй случай не будет работать :). – Tom

+1

@Tom Хорошая идея. Я отредактирую свой ответ. –

+1

Большое вам спасибо за то, что вы нашли время ответить мне. Хорошего дня!:) – xFunkyTImes

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