我对Java中的类和对象的概念感到困惑

时间:2015-10-08 12:31:20

标签: java class object

我对Java中的类和对象的概念感到困惑 我做了以下代码,但我不确定它是否正确! 那么如何测试它并在主类中调用这个类呢?

  import java.util.*;
  public class Pizza {
  public String pizzasize;
  public int cheese;
  public  int pepperoni;
  public Pizza (String pizzasize1,int cheese1,int pepperoni1){
  pizzasize= pizzasize1;
  cheese=cheese1;
  pepperoni=pepperoni1;
 }

这种方法小鸡披萨大小然后声明和分配披萨成本

  public void setPizza(String pizzasize1){
     switch(pizzasize1)
  {
      case "S":
      case "s":   
      {
   int  pc=10;break;
      }
      case "M":
      case "m":   
      {
   int  pc=12;break;
      }
      case "L":
      case "l":   
      {
   int  pc=14;break;
      }
      default:System.out.print("Wrong");
  }//switch
   pizzasize= pizzasize1;
  }

...

 public void setPizza(int cheese1,int pepperoni1){
   cheese=cheese1;
  pepperoni=pepperoni1;
  }

 public String getPizza(){
 return  pizzasize;
 }
 public int getPizza1(){
 return  cheese;
 }
public int getPizza2(){
return  pepperoni;
}

public void calcCost (int pc){
    double totalCost = pc+(cheese+pepperoni) *2;       
}

最后这个样本输出方法

public void getDiscriptions(String pizzasize,int cheese,int pepperoni,double totalCost){
Scanner sc=new Scanner(System.in);
System.out.println("place order");
System.out.println("size: L,M,s");
pizzasize=sc.next();
System.out.println("cheese: ");
cheese=sc.nextInt();
System.out.println("pepperoni: ");
pepperoni=sc.nextInt();
System.out.println("");
System.out.println("your order placed is/nlarge pizza with"+cheese+"cheese,"
 +pepperoni+"pepperoni,/ntotal cost is"+totalCost);
}

}//

3 个答案:

答案 0 :(得分:1)

你已经将你的例子分成了几个块。似乎所有这些方法都应该在同一个Pizza类中。这是真的吗?

这些方法看起来像属于命令行应用程序。如果是这种情况,您将需要main(...)方法。

class Pizza {

    ...the methods you want to test go here...

    public static void main(String[] args) {
        ...your top-level test code goes here...
    }
}

首先你必须编译它。如果您有命令提示符,并且安装了JDK,则可以键入:

$ javac Pizza.java

然后,如果编译器没有给出错误消息,您可以运行它:

$ java Pizza

请参阅@PetterFriberg提供的链接以获取更多信息。

如果要在集成开发环境(IDE)(如Eclipse或IntelliJ)中运行它,那么这就是另一个问题。

答案 1 :(得分:1)

假设您是汽车工程师并且您获得了建造新型号汽车的合同,那么您将对建造的汽车做些什么?

我想,首先你将收集有关的信息:

New brand nameSizeShapeWeightColor等。
SpeedAccelerationRotation等。

之后,您将开始设计汽车的蓝图。蓝图仅显示其工作原理和外观。但是你永远无法用这个蓝图在现实世界中感受到它。

要感受汽车,您必须使用蓝图中提到的相同功能构建汽车。只有在那之后你才能触摸它,打开门,骑它,按下制动器和加速器。使用相同的蓝图,您可以根据需要随意构建汽车。

在OOP中,Class与汽车蓝图相同。它只显示汽车知道的内容:colorsizeweightheightspeed这些都称为属性。它只会告诉您汽车的行为:runsstopsrotates等,这些都称为方法。在现实世界中,类并不存在,它是虚拟的。

class Car_Real {

    String brand_name;
    String color;
    float weight;
    float height;

    void runs() {
        System.out.println("Engine starts");
    }

    void accelerates() {    
        System.out.println("Speed goes on increasing");    
    }

    void brakes(){
        System.out.println("Speed goes on decreasing");    
    }

}

在OOP中,对象是从蓝图派生的真车。在创建对象后,您可以访问门,您可以骑它,这意味着您可以感受和访问类的属性和方法。

public class Car {

    public static void main(String[] args) {    
        Car_Real C1=new Car_Real(); //create object C1 from car    
        C1.runs();    
    }

}

使用相同的类,您可以根据需要创建任意数量的对象。

public class Car {

    public static void main(String[] args) {    
        Car_Real C1 = new Car_Real();    
        Car_Real C2 = new Car_Real();    
        C1.runs();    
        C2.brakes(); // create two object C1, C2    
    }

}

答案 2 :(得分:0)

不错,但有几点指示:

Operator语句不适用于字符串,它们与switchbyteshortchar原始数据类型一起使用。它们也适用于枚举类型。

您可以设置尺寸为

的枚举
int

然后,您的尺寸字段将为public enum Size {S,M,L}; 类型

Size

将您的字段设为private Size pizzaSize; 而不是private。这意味着他们不能从Pizza课外看到。可以使用getter方法读取它们。如果需要更改它们,您也可以提供setter方法。

示例:

public

为清楚起见,我省略了其他字段。另请注意,getter和setter方法与字段名称匹配,前缀为public class Pizza { //cannot be accessed directly from other classes private int cheese; //allows other classes to read the value, but not change it public int getCheese() { return cheese; } //provide a setter like this if you want other classes to be able to change the value. public void setCheese(int cheese) { this.cheese = cheese; } } get,字段的首字母大写。编译器不需要这个,但它是公认的惯例和良好实践。