gpt4 book ai didi

java - 创建对象时使用继承

转载 作者:行者123 更新时间:2023-12-01 16:34:43 25 4
gpt4 key购买 nike

我需要一些帮助,我正在编写一个基本上是一个小商店的程序。我在 Content 类下有不同的项目,如下所示:

public abstract class Content {

// Content Attributes
private String contentID;
private String contentName;
private double applicationPrice;
private int downloadCount;

//private Comments[] comments = new Comments[100];
//private int commentCount= 0;


// Constructor
public Content(String ID, String Name, double price) {
this.contentID = ID;
this.contentName = Name;
this.applicationPrice= price;

}

public Content(String ID, String Name) {
this.contentID = ID;
this.contentName = Name;
this.applicationPrice= 0;

}


// Accessor Methods
public String getID() {
return contentID;
}
public double getApplicationPrice() {
return applicationPrice;
}


public String getContentName() {
return contentName;
}

public void download() {
//code to make a download happen
//++ download

return;
}

public void addComment() {
//scanner input comment

//this.comments[commentCount]= my new comment;
}




}

在内容下,我有其他类扩展它,例如 ApplicationPublication (PublicationBook 进一步扩展)杂志)。例如 Application 如下所示:

import java.util.Scanner;

public class Application extends Content {
// attributes

private String osType;

//constructor

public Application(String ID, String name, double price, String os) {

super(ID, name, price);

this.osType = os;
}

public Application(String ID, String name, String os) {
super(ID, name);
this.osType = os;

}


//accessor methods


public String getOsType() {
return this.osType;
}




}





我的问题是,我认为我在实践中对继承的基本理解存在问题。我想了解如何最好地允许我的用户创建这些对象。到目前为止,我有一个 MyShop 类,他们可以在其中创建应用程序:

import java.util.Scanner;

public class MyShop {
// instance variables that you need (marked as private)

// declare a private array to store content here
private Content[] contentList = new Content[100];
private int contentCount = 0;

// declare a private array to store users here

public MyShop() {

}



public void addApplication(){

Scanner console = new Scanner(System.in);
String appID;
String appName;
double appPrice;
String appOS;
int control = 0;

while(control== 0) {
try {
System.out.println("What is the ID of the Application?");
appID = console.next();

System.out.println("What is the name of the Application?");
appName = console.next();

System.out.println("What is the price of the Application?");
appPrice = console.nextDouble();

System.out.println("What is the minimum OS of the Application?");
appOS = console.next();

Application newApplication= new Application(appID, appName, appPrice, appOS);
System.out.println(newApplication.getApplicationPrice());
contentList[contentCount] = newApplication;
contentCount++;
console.close();
control = 1;
}catch(Exception e) {
System.out.println("invalid input try again!");
}

}


}




public void showContent() {
System.out.println(contentList);
}


// public void addUser(....) {
// // code here
// }


// space for other possible methods here
}

有没有一种方法可以使用继承来避免除了 addApplication() 之外还必须有 addBook()addMagazine() > 而是使用像 addContent() 这样的通用内容?

如果我的问题不清楚或需要更多信息,请告诉我!

最佳答案

重新思考你的模型,它应该符合它在现实世界中的工作方式。您的商店销售商品,而不是制造商。因此,shop 类永远不会创建应用程序。它将拥有一系列可出售的东西。产品。一只股票。有些产品是应用程序,有些是书籍,有些是杂志、汽车、洗发水等等。

重命名ContentStockItemcontentId将是itemId , contentName itemName或者只是 name 。如果模型与现实世界相符,那么它会更容易(容易得多!)理解。

然后,添加 Stock类,其中包含所有项目(List<StockItem> items 表示非常简单的第一种方法)。 Stock 将有一些方法,例如

public StockItem findById(String stockItemId);
public List<StockItem> findAllByName(String name);
public void addItem(StockItem newItem);
public void itemsSold(String stockItemID, int quantity);
//...

现在,如果您想将一本书添加到库存中,只需调用

addItem(new Book("Clean Code", "Robert Martin"));

虽然这本书有库存:

public class Publication extends StockItem { ... }
public class Book extends Publication { ... }

稍后,您会了解到这个简化的模型尚未准备好用于生产,对于真实商店有更好的解决方案,但信息是:从一个好的模型开始。看看现实世界,描述您所看到的内容,并准确地使用它来构建您的类并添加方法。

关于java - 创建对象时使用继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61984978/

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