此涉及Book
类的Java代码是否使用正确的封装?我觉得如果省略一些方法可能会简单得多,但是我们需要其中的每个方法[特别是setter和getters]。
这是头等舱:
public class Book
{
private String title;
private double price;
private final double SALES_TAX=0.075;
public String getTitle()
{
return title;
}
public void setTitle(String title)
{
this.title=title;
}
public double getPrice()
{
return price;
}
public void setPrice(double price)
{
this.price=price;
}
public double getSalesTax()
{
return SALES_TAX;
}
public double increasePrice(double incresePrice)
{
return incresePrice;
}
public double calculateSales(double sales)
{
return sales;
}
}
和第二堂课:
public class BookDriver
{
public static void main(String[] args)
{
Scanner keyboard=new Scanner(System.in);
Book bookOne=new Book();
Book bookTwo=new Book();
bookOne.setTitle("Life of Pi");
System.out.print("Enter number to buy of "+bookOne.getTitle()+": ");
bookOne.setPrice(13.50*bookOne.calculateSales(keyboard.nextDouble()));
bookOne.setPrice((bookOne.getPrice()*bookOne.getSalesTax())+bookOne.getPrice());
System.out.print("Cost for "+bookOne.getTitle()+" $");
System.out.printf("%.2f"+"\n",bookOne.getPrice());
bookTwo.setTitle("Harry Potter: The Goblet Of Fire");
System.out.print("Enter number to buy of "+bookTwo.getTitle()+": ");
bookTwo.setPrice(22.00*bookTwo.calculateSales(keyboard.nextDouble()));
bookTwo.setPrice((bookTwo.getPrice()*bookTwo.getSalesTax())+bookTwo.getPrice());
System.out.print("Cost for "+bookTwo.getTitle()+" $");
System.out.printf("%.2f"+"\n",bookTwo.getPrice());
System.out.print("Enter percent increase of "+bookOne.getTitle()+": ");
bookOne.setPrice((bookOne.getPrice()*bookOne.increasePrice(keyboard.nextDouble()))+bookOne.getPrice());
System.out.printf("Cost of "+bookOne.getTitle()+": $"+"%.2f"+"\n",bookOne.getPrice());
System.out.print("Enter percent increase of "+bookTwo.getTitle()+": ");
bookTwo.setPrice((bookTwo.getPrice()*bookTwo.increasePrice(keyboard.nextDouble()))+bookTwo.getPrice());
System.out.printf("Cost of "+bookTwo.getTitle()+": $"+"%.2f"+"\n",bookTwo.getPrice());
keyboard.close();
}
}
我知道这很多,所以我对回应的期望并不高,但是任何事情都会有所帮助。谢谢!!
此涉及Book类的Java代码是否使用正确的封装?我觉得如果省略一些方法会容易得多,但是我们需要其中的每个方法[特别是setter和...
让我们看一下封装点。您有一个包含属性和方法的类。封装背后的想法是,您希望类中的方法成为更改属性值(状态)的唯一方法。可以这样想:如果程序中的某些其他代码想要更改属性之一的值,则它本身不能执行此操作,它必须在其所驻留的类上请求一个方法来执行此操作。这样,您可以控制对属性的访问。
您不一定需要所有的二传手。例如,假设一本书有标题,并且它没有变化,可能是合理的。因此,您可以将其定型,省略设置器,然后将其传递给构造函数。
因为类title, price
的所有必需变量Book
都设置为private,并且该访问只能使用get..()
使用,并且如果可能的话,只能通过set..(some variable)
或影响其中一个字段,它演示proper encapsulation
后两种方法没有多大意义。您只需返回您输入的内容即可。
public double increasePrice(double increase)
{
price *= increase;
}
public double calculateSales(double sales)
{
//return {your formula}
}