2014-12-05 4 views
0

Я пишу свой код в eclipse, у меня есть класс под названием платформа и подклассы, такие как redplatform, blueplatform.I хочу создать arraylist, который может хранить как blueplatform, так и redplatform, я сделал это до сих пор.Java Polymorphism с ArrayLists

ArrayList<Platform> p = new ArrayList<Platform>(); 
private void createPlatform() { 
    switch (platform) { 
    case 0: 
     p.add(new GreenPlatform(x, y)); 
    case 1: 
     p.add(new RedPlatform(x, y)); 
    case 2: 
     p.add(new BluePlatform(x, y)); 
    case 3: 
     p.add(new MagentaPlatform(x, y)); 
    case 4: 
     p.add(new GrayPlatform(x, y)); 
    } 
repaint(); 
@Override 
public void paintComponent(Graphics g) { 
    // TODO Auto-generated method stub 
    super.paintComponent(g); 
    for (int i = 0; i < p.size(); i++) { 
     p.get(i).paint(g); 
    } 
} 

В каждом классе, он имеет метод рисования, который задает цвет на что-то другое и рисует его , но сейчас все они являются серыми. Это расстраивает.

ответ

3
switch (platform) { 
case 0: 
    p.add(new GreenPlatform(x, y)); 
    break; 
case 1: 
    p.add(new RedPlatform(x, y)); 
    break; 
case 2: 
    p.add(new BluePlatform(x, y)); 
    break; 
case 3: 
    p.add(new MagentaPlatform(x, y)); 
    break; 
case 4: 
    p.add(new GrayPlatform(x, y)); 
} 
+0

Я вижу, я делал эту ошибку! Но как это влияет на программу? Разве это не просто разрыв из цикла for? Поскольку int-платформа имеет только один int, один из случаев будет выполняться, а другие не будут, не так ли? – yuzhengwen

+0

@yuzhengwen 'switch' работает следующим образом: как только случай согласован, и вы его не сломаете, каждый оператор после этого совпадающего случая будет выполнен, даже если они находятся в разных случаях. Например, если случай 2 соответствует, и вы не используете break, все в случае 2, случай 3, случай 4 будет выполнен. Подробнее читайте здесь: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html – tianz

+0

Вижу, спасибо за помощь! – yuzhengwen