您好,我可以问一些关于java(Abstract,getter,setter)的问题吗?

时间:2019-11-02 05:01:58

标签: java

我有点麻烦... 我想在“科学”和“儿童”课程上获得信息。 但是我的结果是

科学书籍:title= nullISBN = nullPublisher= nullPrice= nullYear= 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 

2 个答案:

答案 0 :(得分:2)

您的代码有几处错误:

  1. 您从来没有为书籍设置任何信息。
    您有setBookInfo的方法来执行此操作,但是您永远不会在代码中调用它们,因此它们永远不会运行。

默认情况下,如果未显式初始化Java中的所有成员变量(不是基元),它们都将设置为null

  1. 您的setPrice函数未设置价格。
    它返回一些整数值,但不更改对象的price成员字段。

  2. 在您的setPrice中,参数名称price与实例成员price相同。
    这将导致所谓的“过度阴影”:如果在该函数中编写price = 20,则将更改参数(仅在该函数中本地),而不是private int price成员。
    要访问成员变量,您将必须使用this.price来专门解决它,或者只需更改参数名称即可。

  3. 为什么不使用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; 
}

这应该有效。