当前位置: 首页 > 知识库问答 >
问题:

Java-理解继承

欧阳鸿德
2023-03-14

我是新来的Java,已经参加了几个星期的课程,并被要求完成一个包含以下信息的项目:

>

  • 设计具有以下数据字段的船舶等级:

    >

    船舶建造年份的数据字段(int)。

    构造函数和适当的访问器和变异器。

    显示船名和建造年份的toString方法。

    设计一个CruiseShip子类,扩展船舶类。CruiseShip类应具有以下内容:

    >

  • 最大乘客数的额外数据字段(int)。

    构造函数和适当的访问器和变异器。

    重写基类中的toString方法的toString方法。CruiseShip类的toString方法还应包括最大乘客限制。

    设计一个扩展Ship类的CargoShip类。CargoShip类应具有以下内容:

    >

  • 以吨位(int)为单位的货物容量的额外数据栏。

    构造函数和适当的访问器和变异器。

    重写基类中toString方法的toString方法。CargoShip类的toString方法还应包括货物吨位。

    在适当的类中包括一个equals方法来测试两艘船是否相等——如果它们具有相同的名称并且在同一年建造,则应将其视为相等。

    演示程序(ShipTester)中的类,该程序具有Ship对象数组(至少5个)。将各种Ship、CruiseShip和CargoShip对象分配给数组元素(您可以对对象和数据进行硬编码)并打印出初始船舶配置。显示您可以在船舶样本上同时使用访问器和修改器方法(同样,如果您愿意,您可以在此处对方法参数进行硬编码)。

    我理解问题的依据,我做了以下工作:

    船Java语言

    public class Ship {
    
        private String name;
        private int yearBuilt;
    
        public Ship(String name, int yearBuilt) {
    
            this.name = name;
            this.yearBuilt = yearBuilt;
    
        }
    
        public String returnName() {
    
            return this.name;
    
        }
    
        public int returnYear() {
    
            return this.yearBuilt;
    
        }
    
        public boolean equals(Ship other) {
    
            return false;
    
        }
    
        public String toString() {
    
            return "[Name: " + this.name + ". Year built: " + this.yearBuilt + "]";
    
        }
    }
    

    游船。Java语言

    public class CruiseShip extends Ship {
    
        private int maxPassengers;
    
        public CruiseShip() {
    
            super("USS Enterprise", 2245);
    
            this.maxPassengers = 2400;
    
        }
    
        public CruiseShip(String name, int yearBuilt, int maxPassengers) {
    
            super(name, yearBuilt);
            this.maxPassengers = maxPassengers;
    
        }
    
        public String toString() {
    
            return "Cruise Ship" + super.toString() + ", Passengers: " + this.maxPassengers + "]";
    
        }
    
    }
    

    货船。Java语言

    public class CargoShip extends Ship {
    
        private int cargoCapacity;
    
        public CargoShip() {
    
            super("Black Pearl", 1699);
    
            this.cargoCapacity = 50000;
    
        }
    
        public CargoShip(String name, int yearBuilt, int cargoCapacity) {
    
            super(name, yearBuilt);
            this.cargoCapacity = cargoCapacity;
    
        }
    
        public String toString() {
    
            return "Cargo Ship" + super.toString() + ", Tonnage: " + this.cargoCapacity + "]";
    
        }
    
    }
    

    在我的测试文件-ShipTester中。Java语言

    public class ShipTester {
        public static void main(String []args) {
    
            //I don't know what to put over here...
    
        }
    }
    

    我不知道该在主要方法中加入什么...我知道我必须创建一系列船只,但我不知道如何使用货船、游轮等...

    我应该有的输出:

    展示船:船[名称:安妮女王复仇年建造:1701]

    邮轮[船[名称:企业号建造年份:2245],乘客:2400]

    货船[船名:黑珍珠号建造年份:1699],吨位:50000]

    游轮[船名:美国航海家号建造年份:2371],乘客:2800]

    货船[船名:胜利年建造:1790],吨位:33100]

  • 共有2个答案

    云季萌
    2023-03-14

    Ship是“基本”父类,它将所有其他类放入一个公共族中。这意味着邮轮和货船实际上可以伪装成船。这是多态性的基石,也是使面向对象程序如此强大的特性之一。

    根据您的示例代码,您只需创建一个类型为Ship的数组,例如...

    Ship[] ships = new Ship[5];
    

    然后,您只需用各种船只填充这个阵列......

    ships[0] = new CargoShip("Lolli Pop", 1965, 1990);
    ships[1] = new CruiseShip("Love Boat", 1980, 8);
    

    这意味着,每个元素“充当”一艘船舶,因为从船舶继承来的货船和邮轮,这赋予了它们这样做的能力,因为它们是“船舶”

    因为Ship的显示信息是由它的toString方法定义的,所以您可以简单地使用System.out.println(instanceOfShip)来打印它。例如...

    for (Ship ship : ships) {
        System.out.println(ship);
    }
    

    更详细地了解继承和数组

    这可能看起来令人困惑和望而生畏,但一旦你了解了继承的基础知识,它就会变得非常明显和强大

    刘子实
    2023-03-14

    扩展到Hovercraft所说的内容,但您可能希望对对象数组使用ArrayList。

    创建对象的Arraylist

    实例

    ArrayList<Ship> myArray = new ArrayList();
    myArray.add(new CargoShip("TheKing",1990,10000));
    myArray.add(new CruiseShip("Princess",2000,5000));
    

    [编辑]忘了你也需要打印它

    使用简单的for循环打印,例如:

    for (int i = 0; i < myArray.size(); i++) {
      System.out.println(myArray.get(i).toString());
    }
    

    注意-这不是确切的答案,我不想跳过你的学习过程。但这至少应该给你一个想法,你可以采取的道路。。。

     类似资料:
    • 本文向大家介绍理解javascript对象继承,包括了理解javascript对象继承的使用技巧和注意事项,需要的朋友参考一下 先从一个问题进行研究深入,什么是javascript对象继承? 比如我们有一个“动物”对象的构造函数。 还有一个“猫”对象的构造函数。 我们知道猫也属于动物,如果这个猫对象想要继承动物对象的属性,我们该怎么做呢? 构造函数绑定 使用构造函数绑定是最简单的方法,使用call

    • 本文向大家介绍浅谈Java 对于继承的初级理解,包括了浅谈Java 对于继承的初级理解的使用技巧和注意事项,需要的朋友参考一下 概念:继承,是指一个类的定义可以基于另外一个已存在的类,即子类继承父类,从而实现父类的代码的重用。两个类的关系:父类一般具有各个子类共性的特征,而子类可以增加一些更具个性的方法。类的继承具有传递性,即子类还可以继续派生子类,位于上层的类概念更加抽象,位于下层的类的概念更加

    • 问题内容: 测试类,主要方法: 由于以下原因,我无法获得此信息: B类 继承自 A类 (公共成员),并且无法查看/继承私有功能。因此,在 B类中 ,我们可以调用 talk() 。 //因为它是由父类继承的。 现在,在 talk()* 方法中,由于在 类B中 定义了 sayIt() ,因此可以调用 sayIt() , * __ 我希望将呼叫 B.sayIt() 时进行 this.sayIt() 被执

    • 本文向大家介绍Java单例模式继承覆盖多态原理详解,包括了Java单例模式继承覆盖多态原理详解的使用技巧和注意事项,需要的朋友参考一下 1、单例模式: 1)提出原因   是由gof 也就是四人组提出来的。为了保证jvm中某一类型的java对象永远只有一个,同时也是为了节省内存的开销。因为外面程序可以通过new的方法直接调用类里面的构造方法。导致该类的对象不止一个。 2)定义   单例模式的意思就是

    • 问题内容: 有什么理由禁止Java中的继承,例如通过使用最终类或使用单个私有无参数构造函数的类?将方法定型的充分理由是什么? 问题答案: 这里最好的参考是Joshua Bloch的出色著作“ Effective Java”的第19项,称为“继承的设计和文档,否则将禁止继承”。(在第二版中是第17项,在第一版中是第15项。)你应该阅读它,但我将进行总结。 如果祖先不是为了继承而来的,则继承的类与父母

    • 本文向大家介绍C++中的封装、继承、多态理解,包括了C++中的封装、继承、多态理解的使用技巧和注意事项,需要的朋友参考一下 封装(encapsulation):就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成”类”,其中数据和函数都是类的成员。封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,特定