我没有包含main函数,因为它是空的。我试图从我的父类访问私有变量 name 到子类但是它会抛出一条错误消息。它会是如果你能帮助我的话我很高兴。我是JAVA btw的新手。
public class Author {
private String name;
private String email;
private char gender;
public Author(String name,String email,char gender)
{
this.name=name;
this.email=email;
this.gender=gender;
}
protected String getName()
{
return name;
}
//protected String
}
public class Book extends Author {
private String name;
private String authorname;
private double price;
private int qtyInStock;
Book(String name,Author a,double price,int qtyInStock)
{
this.name=name;
this.authorname=a.getName(); //Error
this.price=price;
this.qtyInStock=qtyInStock;
}
}
错误讯息:
隐式超级构造函数HelloWorld.Author()未定义。必须 显式调用另一个构造函数。
答案 0 :(得分:2)
隐式超级构造函数HelloWorld.Author()未定义。必须显式调用另一个构造函数
错误消息不是因为您正在访问受保护的变量,而是因为Author
没有默认构造函数。如果一个类没有默认构造函数(没有参数的构造函数),那么您必须通过super
调用在任何子类中提供必要的参数。
Book(String name,Author a,double price,int qtyInStock)
{
//pass variables to parent class
super(a.getName(), a.getEmail(), a.getGender());
this.name=name;
this.authorname=a.getName(); //Error
this.price=price;
this.qtyInStock=qtyInStock;
}
答案 1 :(得分:0)
您正在混合几个概念。在Author
课程中,您有protected getName()
个功能。这意味着只有Author
个类和Author
子类才能访问它。
此外,在您的项目中,您将Book
定义为 和Author
。但是,Book
不 Author
Author
。
由于您将Book
定义为extends Author
,因此图书构造函数需要调用显式Author
构造函数。如果可以的话,Java编译器会调用'默认构造函数'(Author()
),但由于你没有提供默认构造函数,它会要求你告诉你应该调用什么。
我的假设是你宁愿拥有Book
有Author
的结构:
public class Author {
public enum Gender {
FEMALE, MALE
}
private final String name;
private final String email;
private final Gender gender;
public Author(String name,String email,Gender gender) {
this.name = name;
this.email = email;
this.gender = gender;
}
public String getName() {
return name;
}
public String getEmail() {
return email;
}
public Gender getGender() {
return gender;
}
}
class Book {
private final String name;
private final double price;
private final int qtyInStock;
private final Author author;
Book(String name,Author a,double price,int qtyInStock) {
this.name =name;
this.author = a;
this.price = price;
this.qtyInStock = qtyInStock;
}
public String getName() {
return name;
}
public double getPrice() {
return price;
}
public int getQtyInStock() {
return qtyInStock;
}
public Author getAuthor() {
return author;
}
}
对于类型安全,我将Gender
定义为enum
,而不是char
,它可以接受可接受的值。此外,我已经扩展了您的示例以使类“可变(final
字段,无set
方法”。你可能想要也可能不想要。