在java中,如何根据以前的方法对对象进行分类?
我在AP Comp Sci的一个实验室工作,包括向量类和四边形类。向量类构造向量,四边形类从4个向量构造一个四边形,然后对四边形的类型进行分类。为了做到这一点,我测试了每一个单独的形状,它可以是这样的代码在java中,如何根据以前的方法对对象进行分类?,java,methods,static,Java,Methods,Static,我在AP Comp Sci的一个实验室工作,包括向量类和四边形类。向量类构造向量,四边形类从4个向量构造一个四边形,然后对四边形的类型进行分类。为了做到这一点,我测试了每一个单独的形状,它可以是这样的代码 public boolean isParallelogram() { if(side1.isParallel(side3) && side2.isParallel(side4)) { return true; } else
public boolean isParallelogram()
{
if(side1.isParallel(side3) && side2.isParallel(side4))
{
return true;
}
else
{
return false;
}
}
然后,当它返回四边形的分类时,我无法使用这些方法以及它们返回的内容,因为“非静态方法不能在静态上下文中引用”。如果我不能访问这些方法,因为四边形对象并不总是存在,我如何对其进行分类?这是我目前的分类方法
public static String classify()
{
System.out.print("quadrilateral");
return "quadrilateral";
if(Quadrilateral.isParallelogram() == true)
{
System.out.print(" - parallelogram");
return " - parallelogram";
}
}
如果您希望直接从类调用该方法,则应将其声明为
static
:
public static boolean isParallelogram()
但是,如果方法不与类关联,而是与单个对象关联,则需要首先实例化对象(在这种情况下,方法不需要是
静态的)
对我来说,isParallelogram()
无论如何看起来都不像类方法,因此您可以选择第二个操作,即在调用其方法之前先实例化对象
但是如果分类是类四边形的行为。然后它应该看起来像:
//Assuming this method checks itself whether it is a quadtrilateral or parallelogram
public String classify() //no static declaration
{
if(this.isParallelogram()){ //apply the check on itself
System.out.print("parallelogram");
return "parallelogram";
}
else{
System.out.print("quadrilateral");
return "quadrilateral";
}
}
静态
方法不能由非静态方法调用。我相信你有一个类向量。您可以使用类四边形类似于:
public class Quadrilateral {
private List<Vector> sides;
public Quadrilateral(List<Vector> sides){
this.sides = sides;
}
// Have non-static methods
public classify() {}
public isParallelogram() {}
}
然后,您可以在此四边形对象上调用classify()
。希望这能有所帮助。如果我在isParallelogram方法中添加一个static,那么我会遇到与classify方法相同的问题,只比classify方法高一级。现在编译器告诉我“非静态变量side1不能在静态上下文中引用”。如果我将static放在构造函数中,其中side1被初始化,它会说“这里不允许修改器static”,我不建议将其设置为静态,因为该方法看起来不属于该类。只需实例化对象(而不使方法为静态的
)。这在我的解决方案中。isParallelogram方法和classify方法都在类中吗?另外,如何首先实例化对象?您不能保证编译代码时始终会创建对象。@LiamGuthrie是classify()
四边形类的行为?如果是,则不应是静态的。如果它只是客户端类中的一个方法,例如,它位于测试代码的main()方法旁边,那么它应该是静态的。我不确定行为是什么意思,但classify是四边形类中的一个方法。它没有标记为static,但编译器仍然将其称为“静态上下文”,或者至少将行-if(quartarial.isParallelogram()==true)-称为static context您必须向其传递一个特定的四边形对象进行分类,然后它可以调用该对象上的方法。现在就像你问一个人是高是矮,而不是任何特定的人,只是一般的人;否则返回false代码>不是很好的风格;您可以将其替换为返回布尔表达式代码>
public class Quadrilateral {
private List<Vector> sides;
public Quadrilateral(List<Vector> sides){
this.sides = sides;
}
// Have non-static methods
public classify() {}
public isParallelogram() {}
}
Vector side1 = new Vector()
Vector side2 = new Vector() // create two more vector objects
Quadrilateral quadrilateral = new
Quadrilateral(Arrays.asList(side1,side2,side3,side4));