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

时间:2017-11-02 06:43:01

标签: java methods static

我正在为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";
    }
}

2 个答案:

答案 0 :(得分:1)

非静态方法无法调用

static个方法。我相信你有一个类Vector。您可以使用类Quadrilateral之类的内容:

public class Quadrilateral {
      private List<Vector> sides;

      public Quadrilateral(List<Vector> sides){
            this.sides = sides;
      }
      // Have non-static methods
      public classify() {}
      public isParallelogram() {}
}

现在,您在其他类中实例化QuadrilateralVector类,并使用它们:

 Vector side1 = new Vector()
 Vector side2 = new Vector() // create two more vector objects
 Quadrilateral quadrilateral = new 
                Quadrilateral(Arrays.asList(side1,side2,side3,side4));

然后你可以在这个四边形对象上调用classify()。希望这会有所帮助。

答案 1 :(得分:0)

如果要直接从类调用方法,则应将其声明为static

public static boolean isParallelogram()

但是,如果方法不是与类关联,而是与单个对象关联,则需要首先实例化对象(在这种情况下,您的方法 确实如此不需要 成为static)。

Quadrilateral quad = new Quadrilateral();    //instantiate first
if(quad.isParallelogram()){
    //do whatever
}

对我来说isParallelogram()看起来不像是一个类方法,所以你可以选择第二个opotion,即在调用它的方法之前先实例化对象。

但如果classify是类Quadrilateral的行为。然后看起来像:

//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";
    }
}