如何扩展或实现课程?

时间:2013-11-26 08:03:05

标签: java class extends implements

图片显示任务: enter image description here

首先,我很抱歉,因为我表达了自己的不好意思。

我有这样的任务,我不需要你为我做这件事。

VehicleSedan的父类(原因是Sedan类是字符串类型)。

  1. 如何使用通用类扩展或实现Vehicle类?
  2. 我忘了问我的老师,但也许你会知道,什么意味着指向所有者类的条带指针,那是什么:has a
  3. P.S。如果您需要我已编写的代码,我会告诉您。

    所以这是我的父车辆类:

    public class Vehicle {
    
        private int vehicleNumber;
        protected int fuelTankSize;
        protected int maxSpeed; 
        protected   Owner owner;
    
        //1
        public Vehicle(int vehicleNumber){
            this.vehicleNumber = vehicleNumber;
        }
        //2
        public Vehicle(int vehicleNumber, int fuelTankSize) {
            this.vehicleNumber = vehicleNumber;
            this.fuelTankSize = fuelTankSize;
        }
        //3
        public Vehicle(int vehicleNumber,  int fuelTankSize, int maxSpeed) {
            this.vehicleNumber = vehicleNumber;
            this.fuelTankSize = fuelTankSize;
            this.maxSpeed = maxSpeed;
        } 
        //4
        public Vehicle(int vehicleNumber, int fuelTankSize, int maxSpeed, Owner owner) {
            this.vehicleNumber = vehicleNumber;
            this.fuelTankSize = fuelTankSize;
            this.maxSpeed = maxSpeed;
                this.owner = owner;
        } 
    
        //1
        public  int getMaxSpeed() {
            return maxSpeed;
        }
        public void setMaxSpeed (int maxSpeed){
            this.maxSpeed = maxSpeed;
        }
        //2
        protected int getFuelTankSize(){
            return fuelTankSize;
        }
        protected void setFuelTankSize (int fuelTankSize){
            this.fuelTankSize = fuelTankSize;
        }
        //3
        public Owner getOwner(){
            return owner;
        }
        public void setOwner (Owner owner){
            this.owner = owner;
        }
    
    }
    
    小孩轿车:

    public class Sedan extends Vehicle {
    
        private String registrationIndex;{      
        }
    
        public Sedan (int vehicleNumber, int fuelTankSize, int maxSpeed, String registrationIndex, Owner owner) {
            super(vehicleNumber, fuelTankSize, maxSpeed, owner);
            this.setRegistrationIndex (registrationIndex);
        }
    
        public String getRegistrationIndex (){
            return registrationIndex;
        }
        public void setRegistrationIndex (String registrationIndex) {
            this.registrationIndex = registrationIndex;
        }
    
    }
    

    第二个没有错误的环球儿童:

    public class Universal extends Vehicle {
        private int trunkSize;
    
        public Universal (int vehicleNumber, int fuelTankSize, int maxSpeed, int trunkSize, Owner owner) {
            super(vehicleNumber, fuelTankSize, maxSpeed, owner);
            this.setTrunkSize (trunkSize);
        }
    
        public int getTrunkSize() {
            return trunkSize;
        }
        public void setTrunkSize(int trunkSize) {
            this.trunkSize = trunkSize;
        }
    
        public void printDescription() {
            super.printDescription();
            System.out.println("Universalo bagažinės tūris: " + getTrunkSize() + "l.");
        }
    
    }
    

    和一些神秘的(对我而言)所有者类:

    public class Owner  {
        public String firstName;
        public String lastName;
    
        public Owner (String firstName){
            this.firstName = firstName;
        }
    
        public Owner (String firstName, String lastName){
            this.firstName = firstName;
            this.lastName = lastName;
        }
    }
    

    添加了VechileTest进行测试:

    public class VehicleTest {
    
            public static void main(String[] args) {
    
    
                Vehicle vehicleInf = new Vehicle (1, 45, 260);
                Universal universalInf = new Universal(2, 50, 220, 70);
                Sedan sedanInf = new Sedan (3, 40, 180, "AVA 123");
    
                vehicleInf.printDescription();
                universalInf.printDescription();
                sedanInf.printDescription();
            }
        }
    

2 个答案:

答案 0 :(得分:2)

嗯,首先,我建议您阅读UML类图的一个很好的教程/解释,例如this

在了解了基础知识之后,将其转换为Java代码应该很容易。 我将为您提供Universal课程的代码以及Vehicle的开头代码。其余的你必须自己做。

环球类:

public class Universal extends Vehicle {

  private int trunkSize;

  public int getTrunkSize() {
    return this.trunkSize;
  }

  public void setTrunkSize(int trunkSize) {
    this.trunkSize = trunkSize;
  }
}

如您所见,类框内的第一个块指的是变量。 -+表示可见性(-为私有,+为公开)。

下一个块是关于方法,指定可见性,返回类型,方法名称和参数(类型和名称)。

UniversalVehicle之间的箭头表示继承关系(请参阅代码Universal extends Vehicle)。

因此,所有图表都是您班级的施工计划;至少对于静态部分,意味着他们可以拥有的关系和状态。

班级的开始:

public class Vehicle {
    private int vehicleNumber;
    // the rest here ...
}

编辑: 好吧,既然我看到了你的代码,你似乎有一些误解:

  1. Sedan类型不是String类型,它来自Sedan类型(扩展Vehicle)。只是Sedan类型中的新成员变量是String类型,无关紧要。

  2. 第一个问题:Vehicle类是Sedan的基类(父)类。你不要对它做任何事情,继承是从孩子对父母的表达,而不是相反。 Vehicle通常应该被声明为抽象的(因为您无法创建泛型Vehicle的实例),但这不在图中。

  3. 关于你的第二个问题:has a关系就是这样。它表示一个类有另一个类作为它的成员(已经在类图中冗余地表达了),所以没有什么可做的。
  4. 此外,您的代码还有一些问题:

    1. 我没有看到在Vehicle类中声明的任何构造函数,那些4可以去。
    2. 在声明Sedan变量后,{}有一对超级registrationIndex
    3. 由于您的Vehicle没有默认构造函数,因此您必须从Sedan类调用此构造函数(或从Vehicle中删除构造函数。
    4. Universal类使用trunkSize调用Vehicle构造函数,而Vehicle构造函数则需要vehicleNumber

答案 1 :(得分:0)

您的Vehicle类没有无参数构造函数,这意味着UniversalSedan必须显式调用其中一个(super(...);)。您在Universal中执行此操作(虽然您传递的是行李箱大小而不是Vehicle的构造函数所期望的车辆号码),但在Sedan中没有。

至于第二个问题:OOP中的两个主要关系是is ahas a。差异很容易解释如下:

  • 轿车是一种车辆
  • 车辆拥有者

is a表示它继承了其他内容的某些属性,has a表示它具有对其他内容的引用。