gpt4 book ai didi

java - 从抽象类和子类java创建对象数组

转载 作者:行者123 更新时间:2023-12-02 08:06:34 27 4
gpt4 key购买 nike

希望有人能够帮助我,或者为我指明正确的方向。我有一个包含许多条目的文本文件

CUST001, John Jones, 555 0505, 19/09/1981
CUST002, PeterParker, 555 1234, 0.2
CUST003, Michael Michaels, 555 4321, 19/09/1981
etc

我有一个抽象父类(super class),其中包含共享属性的构造函数和访问器以及一个子类。然后我有另一个类,也带有构造函数和访问器。

我读取每一行,并在“,”处将其拆分,并将其读入临时数组。然后,我创建空数组以从父类(super class)中读取属性,并使用构造函数创建各种对象。

我遇到的问题:带有构造函数的常规类 - 这可以完美地工作。我在创建对象后将它们打印出来。

但是我的子类,它只返回值 null, null, null因此,我认为我的父类(super class)和子类存在问题。

使用具体类构造函数创建对象:

Product[] prod = new Product[20]; 
BufferedReader inFile = new BufferedReader (new FileReader("product.txt"));
String inputLine = inFile.readLine();
for (int i = 0; i < 6 ; i++)
{
String[] tmpProd = inFile.readLine().split(",");
prod[i] = new Product( tmpProd[0],
tmpProd[1],
tmpProd[2],
Float.parseFloat(tmpProd[3]),
tmpProd[4].charAt(0));
}

“尝试”从父类(super class)(Customer)和子类(STCustomer)创建对象:

Customer[] stdCust= new STCustomer[20];
BufferedReader inFileCust = new BufferedReader (new FileReader ("customer.txt"));
String inputCust = inFileCust.readLine();
for (int i = 0; i < 6; i++)
{
String[] tmpCust = inFileCust.readLine().split(",");
GregorianCalendar d = new GregorianCalendar(year, month -1, date);
stdCust[i] = new STCustomer( tmpCust[0],
tmpCust[1],
Long.parseLong(tmpCust[2]),
d);//the block to convert date works - omitted here
}

这是创建对象的正确方法吗?

Customer[] stdCust= new STCustomer[20];

最佳答案

问题出在你的子类构造函数上。您必须显式调用所需的父类(super class)构造函数,否则编译器将添加 super() 作为子类构造函数中的第一个语句。下面是一个例子。

import java.util.Date;

public class Test {
public static void main(String... abc){
Customer[] a = new STCustomer[20];
a[0] = new STCustomer();
a[1] = new STCustomer("Hello","World",12L,new Date());
a[1] = new STCustomer("Hello","World",12L);
}
}

class Customer{
public Customer(){
System.out.println("Customer()");
}

public Customer(String a, String b, long c,Date d){
System.out.println("Customer(String a, String b, long c,Date d)");
// Set values to fields
}
}

class STCustomer extends Customer{
public STCustomer(){}

public STCustomer(String a, String b, long c,Date d){

}

public STCustomer(String a, String b, long c){
super(a,b,c,new Date());
}
}

和输出

Customer()
Customer()
Customer(String a, String b, long c,Date d)

关于java - 从抽象类和子类java创建对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8073452/

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