我有点麻烦... 我想在“科学”和“儿童”课程上获得信息。 但是我的结果是
科学书籍:title= null
,ISBN = null
,Publisher= null
,Price= null
和Year= null
如何修复和显示信息?
首先,它是一个抽象类,名称为Book
String title;
String ISBN;
String publisher;
double price;
int year;
public String toString() {
return "title ="+title+" "+"ISBN ="+ISBN+" "+"Publisher= "+publisher+" "+"Price= "+price+" "+"Year= "+year+" ";
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getIsbn() {
return ISBN;
}
public void setIsbn(String ISBN) {
this.ISBN = ISBN;
}
public String getPublisher() {
return publisher;
}
public void setPublisher(String publisher) {
this.publisher = publisher;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public void getBookInfo() {
}
public abstract double setPrice(double price);
class ScienceBook extends Book {
public double setPrice(double price){
return price*0.1;
}
public void setBookInfo() {
title = "sbook1";
ISBN = "123456";
publisher = "pub2";
year = 2017;
price = 10;
}
}
class ChildrenBook extends Book{
public double setPrice(double price) {
return 20;
}
public void setBookInfo() {
title = "cbook1";
ISBN = "12345";
publisher = "pub1";
year = 2016;
price = 20;
}
}
程序执行将从此处开始,
public class Midtermtest {
public static void main(String[] args) {
ScienceBook scb1 = new ScienceBook();
ScienceBook scb2 = new ScienceBook();
ChildrenBook chb = new ChildrenBook();
System.out.println("Here is the book information: ");
System.out.println("Science Book: "+scb1.toString());
System.out.println("Children Book: "+scb2.toString());
System.out.println("Childern Book: "+chb.toString());
}
}
预期输出:
Science Book: title= () ISBN = () Publisher= () Price= () Year= ()
Children Book1 ~~
Children Book2 ~~
() << they are information
答案 0 :(得分:2)
您的代码有几处错误:
setBookInfo
的方法来执行此操作,但是您永远不会在代码中调用它们,因此它们永远不会运行。默认情况下,如果未显式初始化Java中的所有成员变量(不是基元),它们都将设置为null
。
您的setPrice
函数未设置价格。
它返回一些整数值,但不更改对象的price
成员字段。
在您的setPrice
中,参数名称price
与实例成员price
相同。
这将导致所谓的“过度阴影”:如果在该函数中编写price = 20
,则将更改参数(仅在该函数中本地),而不是private int price
成员。
要访问成员变量,您将必须使用this.price
来专门解决它,或者只需更改参数名称即可。
为什么不使用price
的{{1}}参数?
您不应定义不需要的参数。使用或删除它。
这对于家庭作业特别重要,因为它会降低您的成绩!
答案 1 :(得分:-1)
public double setPrice(double price) {
this.price = 20;
}
public void setBookInfo() {
this.title = "cbook1";
this.ISBN = "12345";
this.publisher = "pub1";
this.year = 2016;
this.price = 20;
}
这应该有效。