如何将我的变量保持为私有并仍然获得所需的输出?

How can I keep my variables as private and still get the output desired?

我的作业要求我们将以下变量设为私有,如下所示:private String title; 私人双重价格; --------这些变量可以在文件Book.java.

中找到

我的代码无法检索这些变量,因为它们对文件 Textbook.java 不可见。当我 运行 TextbookApp.java 文件时,我怎样才能使这些变量保持私有,但仍能获得所需的输出。这是所需的输出:

这是我现在得到的输出:

Book.java

package assignment2;

public class Book {

private String title;
private double price; 

    public Book ()
    {
        title = "";
        price = 0.0;
    }
    
    public Book (String t, double p)
    {
        title = t;
        price = p;  
    }   
    public void setTitle(String t)
    {
        title = t; 
    }
    
    public String getTitle()
    {
        return title;
    }
    
    public void setPrice(double p)
    {
        price = p;
    }
    
    public double getPrice()
    {
        return price;
    }
    
    public String toString()
    {
        return title + " " + price; 
    }
}

BookApp.java

package assignment2;

public class BookApp {

    public static void main(String[] args) {
        Book b1 = new Book();
        b1.setTitle("John Doe");
        b1.setPrice(8.5);
        System.out.println(b1.toString());

        Book b2 = new Book("Ann Smith", 9.7);
        System.out.println(b2.toString());
    }

}

Textbook.java

package assignment2;

public class Textbook extends Book{
    private int courseID;
    
    public Textbook()
    {
        title = "";
        price = 0.0;
        courseID = 0;
    }
    
    public Textbook (String t, double p, int ID)
    {
        title = t;
        price = p;
        courseID = ID;
    }
    
    public void setCourseID(int ID)
    {
        courseID = ID;
    }
    
    public int getCourseID()
    {
        return courseID;
    }
    
    public String toString()
    {
        return title + " " + price + " " + courseID; 
    }
}

TextbookApp.java

package assignment2;

public class TextBookApp extends Textbook {

    public static void main(String[] args) {
        Book b = new Book ("Ann Smith", 9.7);
        System.out.println(b.toString());
        
        Textbook tb1 = new Textbook();
        tb1.setTitle("John Doe");
        tb1.setPrice(8.5);
        tb1.setCourseID(2050);
        System.out.println(tb1.toString());
        
        Textbook tb2 = new Textbook("Ann Smith", 9.7, 3090);
        System.out.println(tb2.toString());
    }

}

您可以通过从 Textbook 子类调用 Book 中适当的超类构造函数或方法来解决错误:

package assignment2;

public class Textbook extends Book{
    private int courseID;
    
    public Textbook()
    {
        courseID = 0;
    }
    
    public Textbook (String t, double p, int ID)
    {
        super(t, p);
        courseID = ID;
    }
    
    public void setCourseID(int ID)
    {
        courseID = ID;
    }
    
    public int getCourseID()
    {
        return courseID;
    }
    
    public String toString()
    {
        return super.toString() + " " + courseID; 
    }
}

无参数构造函数Textbook()会自动调用无参数构造函数Book(),所以你不需要显式设置titleprice Textbook().