Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中,如何根据以前的方法对对象进行分类?_Java_Methods_Static - Fatal编程技术网

在java中,如何根据以前的方法对对象进行分类?

在java中,如何根据以前的方法对对象进行分类?,java,methods,static,Java,Methods,Static,我在AP Comp Sci的一个实验室工作,包括向量类和四边形类。向量类构造向量,四边形类从4个向量构造一个四边形,然后对四边形的类型进行分类。为了做到这一点,我测试了每一个单独的形状,它可以是这样的代码 public boolean isParallelogram() { if(side1.isParallel(side3) && side2.isParallel(side4)) { return true; } else

我在AP Comp Sci的一个实验室工作,包括向量类和四边形类。向量类构造向量,四边形类从4个向量构造一个四边形,然后对四边形的类型进行分类。为了做到这一点,我测试了每一个单独的形状,它可以是这样的代码

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));