gpt4 book ai didi

java - 子类和父类(super class)

转载 作者:行者123 更新时间:2023-11-30 04:01:15 25 4
gpt4 key购买 nike

我正在尝试构建一个具有某些要求的程序,主要是我有一个类,然后创建一个添加功能的子类。我创建了类 DVD,然后创建了子类。

我添加了一种将年份添加到列表中的方法,以及重新进货费用,该费用将添加到打印的最终库存值(value)中。我构建了子类,创建了重写方法,但它没有被添加到显示的输出中。不仅如此,它还将输入年份放在了错误的位置。我没有收到任何错误,它只是表现得就像子类不存在一样,即使我的 DVD 类说某些方法正在被重写。

我想我一定错过了一些我应该调用新方法的地方,也许我读错了资源,但听起来我只需要调用 DVD 类,而我想要重写的方法将被自动覆盖。我更愿意将此信息添加到父类(super class)中,但这是作业的要求。

所以我想知道当我需要它们添加这些新功能时,我实际上如何调用这些重写方法?我不断看到资源告诉我如何创建它们,但没有实际实现它们。

从我的 main 方法中,我调用 dvd 类,然后打印它。但是,它只打印原始 DVD 类中的内容,除了在产品 ID 应该所在的位置添加年份的奇怪添加之外。

public class DVD {



String name;
int id;
int items;
double cost;

//default constructor
public DVD() {
name = "";
id = 0;
items = 0;
cost = 0.0;
}//end default constructor

//constructor to initialize object
public DVD(String dvdName, int itemNum, int quantity, double price) {
name = dvdName;
id = itemNum;
items = quantity;
cost = price;
}//end constructor


//method to calculate value
public double getInventoryValue() {
return items * cost;
}

//method to set name
public void setdvdName(String dvdName){
this.name = dvdName;
}

//method to get name
public String getName(){
return name;
}

//method to set id
public void setitemNum( int itemNum){
this.id = itemNum;
}

//method to get id
public int getId(){
return id;
}

//method to set items
public void setquantity(int quantity){
this.items = quantity;
}

//method to get items
public int getItems(){
return items;
}

//method to set cost
public void setprice( double price){
this.cost = price;
}

//method to get cost
public double getCost(){
return cost;
}

/**
*
* @return
*/

public String toString() {

return "DVD Name: " + getName() +
"ID: " + getId() +
"Items: " + getItems() +
"Cost: " + getCost() +
"Total Value: " +getInventoryValue();
}
}

-

public class ExtendedDVD extends DVD{
double restockFee;
int year;

public ExtendedDVD(){
year = 0;
}
public ExtendedDVD(int year) {
this.year = year;
}

public void setRestockFee(){
this.restockFee = 0.05;
}

public double getRestockFee(){
return restockFee;
}


public void setYear(){
this.year = 0;
}

public int getYear(){
return year;
}

@Override
public double getInventoryValue(){
double value1 = super.getInventoryValue();
double value = restockFee * value1;
double totalInventoryValue = value + super.getInventoryValue();
return totalInventoryValue;
}

@Override
public String toString(){
return super.toString() + "Year" + getYear();
}
}

}

public class Inventory {

DVD[] inventory = new DVD[5];
int current = 0;
private int len;

public Inventory(int len){
inventory = new DVD[len];

}

public double calculateTotalInventory() {
double totalValue = 0;
for ( int j = 0; j < inventory.length; j++ )
totalValue += inventory[j].getInventoryValue();
return totalValue;
}

/**
*
* @param dvd
* @throws Exception
*/
public void addDVD(DVD dvd) throws Exception {
if (current < inventory.length) {
inventory[current++]=dvd;
}else {
Exception myException = new Exception();
throw myException;

}
}
void sort() {
for (DVD inventory1 : inventory) {
len = current;
}

for (int i=0; i<len;i++) {
for(int j=i;j<len;j++) {
if (inventory[i].getName().compareTo(inventory[j].getName())>0) {
DVD temp = inventory[j];
inventory[j] = inventory[i];
inventory[i] = temp;
}
}
}
}




public int getNumberOfItems() {
return current;
}


public void printInventory() {
System.out.println("Current Inventory:");
for(int i=0;i<current;i++) {
System.out.println(inventory[i]);
}
System.out.println("The total value of the inventory is:"+calculateTotalInventory());
}
}

-

public class inventoryprogram1 {

/**
* @param args the command line arguments
*/
public static void main(String[] args){


boolean finish = false;
String dvdName;
int itemNum;
int quantity;
double price;
int year = 0;

Inventory inventory = new Inventory(5);
while (!finish) {
Scanner input = new Scanner(System.in); // Initialize the scanner
System.out.print("Please enter name of DVD: ");
dvdName = input.nextLine();
if (dvdName.equals("stop")) {
System.out.println("Exiting Program");
break;
} else {
System.out.print("Please enter Product Number: ");
itemNum = input.nextInt();
System.out.print("Please enter units: ");
quantity = input.nextInt();
System.out.print("Please enter price of DVD: ");
price = input.nextDouble();
System.out.print("Please enter production year: ");
itemNum = input.nextInt();

DVD dvd= new DVD(dvdName,itemNum,quantity,price);

try {
inventory.addDVD(dvd);
}catch( Exception e) {
System.out.println("Inventory is full.");
break;
}

System.out.println("DVD: " + dvd);

}//end else

}
inventory.sort();
inventory.printInventory();
}
}

最佳答案

如果您想使用在 ExtendedDVD 中编写的新方法,您需要实例化该类,您仍然会调用原始 dvd 类,这样您仍然可以获得这些方法。

例如

DVD dvd = new DVD(dvdName, itemNum, quantity, price);

DVD Dvd = new ExtendedDVD(dvdName, itemNum, quantity, price);

是两个不同的东西

此外,如果您查看主要方法,您会分配 itemNum 两次,这就是它向您显示年份的原因

关于java - 子类和父类(super class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21950925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com