2014-09-28 66 views
-1

我必须模拟在某些海岸控制权限的防波堤。我的解决方案实现了一类“船”和类“OilShip”,“FishingShip”和“CarriageShip”,我用继承和发如何将对象从类转换为超类

public class OilShip extends Ship{ 
... 
} 
public class FishingShip extends Ship{ 
... 
} 
public class CarriageShip extends Ship{ 
... 
} 

在另一类我有船舶船=新船(...);我想以某种方式使油船进入船舶,即

public Class Abcd{ 
    Ship ship; 

    public Abcd(OilShip oship){ 
    ship=oship; //************* 
    } 
} 

似乎有问题的代码,请告诉我。

+0

这样可以正常工作。你有什么问题? – SLaks 2014-09-28 14:12:29

+0

你能解释一下你的问题吗?如果你使用IDE,你是否在屏幕上看到任何错误或警告?如果你正在使用命令行来编译java类,你会得到任何编译错误吗? – CalabashFox 2014-09-28 14:13:55

+0

您添加的代码将使'class abcd'中的成员'ship'通过船级接口指向oil_ship的实例。 你说你有一艘船'Ship ship = new Ship(...)'的实例;'这个实例永远不会是一艘Oil_ship – odedsh 2014-09-28 14:14:08

回答

0

请确保您在子类的构造函数中调用超类的构造函数。

该解决方案为我工作得很好:

public class Ship { 
    private String name; 
    private int weight; 

    public Ship(String name, int weight) { 
     this.name = name; 
     this.weight = weight; 
    } 
} 

class OilShip extends Ship { 
    private int oilCapacity; 

    public OilShip(int oilCapacity, String name, int weight) { 
     super(name, weight); 
     this.oilCapacity = oilCapacity; 
    } 
} 

class FishingShip extends Ship { 
    private int fisherMen; 

    public FishingShip(int fisherMen, String name, int weight) { 
     super(name, weight); 
     this.fisherMen = fisherMen; 
    } 
} 

class CarriageShip extends Ship { 
    private int containers; 

    public CarriageShip(int containers, String name, int weight) { 
     super(name, weight); 
     this.containers = containers; 
    } 
} 

,Java的类应该一直被赋予一个名称,其中第一个字符是大写字母,每一个新词同前如前所述 - > CamelCase

您不需要不同的构造函数。在这里使用继承背后的真棒事情是,不管你从你的构造函数中放入“abcd”的超类“Ship”中的哪个子类,它都会被接受:

public class Abcd { 
    private Ship ship; 

    public Abcd(Ship ship){ 
     this.ship = ship; 
    } 
} 
+0

谢谢,CamelCase已经更正。我想有这样的事情: '公众Abcd(OilShip oship){ this.ship = oship; }' 或类似的东西。这是不可能的吗? – 2014-09-28 15:34:24

+0

这是可能的。 – ChristopherMortensen 2014-09-28 16:01:18

相关问题