当前位置: 首页 > 知识库问答 >
问题:

在自定义类中使用接口

符允晨
2023-03-14

我正在编写一个代码,它取两个点,确定两个点的大小,比较它们,并返回哪个更大。我有我的主类和方法来运行所有的东西,然后还有另一个类点来实现我的接口。但是,我无法使从接口调用的方法正常工作。我的代码是:

public class A7 {
    public static void main(String[] args) {
        Relatable p1 = new Point(1,2);
        Relatable p2 = new Point(2,3);
        System.out.println(p1.isLargerThan(p2));
    }
}

class Point implements Relatable {
    private int x;
    private int y;
    private Point p1;
    private Point p2;

    public Point() {
        x = 0;
        y = 0;
    }
    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
    public void setX(int x) {
        this.x = x;
    }
    public void setY(int y) {
        this.y = y;
    }
    public int getX() {
        return this.x;
    }
    public int getY() {
        return this.y;
    }
    public double getMagnitude() {
        double magnitude = Math.sqrt(this.x * this.x + this.y * this.y);
        return magnitude;
    }
    @Override
    public int isLargerThan(Relatable other) {
        if(p1.getMagnitude() > p2.getMagnitude()) {
            return 1;
        } else if(p1.getMagnitude() < p2.getMagnitude()) {
            return -1;
        } else {
            return 0;
        }
    }
}

interface Relatable {
    int isLargerThan(Relatable other);
}

当我尝试运行它时,我得到错误“exception in thread”main“java.lang.nullPointerException:不能调用”point.getMetality()“,因为”this.p1“是null”有人知道我可以解决这个问题的方法吗?

共有1个答案

狄心水
2023-03-14

有这两个变量点p1和点P2是没有意义的。所以我删除了这2个变量,重写了代码。比较的重点在于比较在A7类的main方法中创建的两个对象,它们是相关的p1和相关的p2。因此,修改了方法的代码,以比较这两个对象(相关的p1和相关的p2),并在接口中添加了该方法。看一看

public class A7 {
public static void main(String[] args) {
    Relatable p1 = new Point(1,2);
    Relatable p2 = new Point(2,3);
    System.out.println(p1.isLargerThan(p2));
 }
}

class Point implements Relatable {
private int x;
private int y;

public Point() {
    x = 0;
    y = 0;
}
public Point(int x, int y) {
    this.x = x;
    this.y = y;
}
public void setX(int x) {
    this.x = x;
}
public void setY(int y) {
    this.y = y;
}
public int getX() {
    return this.x;
}
public int getY() {
    return this.y;
}
public double getMagnitude() {
    double magnitude = Math.sqrt(this.x * this.x + this.y * this.y);
    return magnitude;
}
@Override
public int isLargerThan(Relatable other) {
    if(this.getMagnitude() > other.getMagnitude()) {
        return 1;
    } else if(this.getMagnitude() < other.getMagnitude()) {
        return -1;
    } else {
        return 0;
    }
 }
}

interface Relatable {
  int isLargerThan(Relatable other);
   double getMagnitude();
}
 类似资料:
  • 问题内容: 我试图将对象存储在redis中,redis是类的实例,因此具有功能,这是一个示例: 有没有一种方法可以将对象与函数一起存储在Redis中?我尝试过,但是只保留了属性。如何存储函数定义并能够执行以下操作: 打电话时如何获得? 先感谢您! 编辑 得到了修改MyClass.prototype并存储值的建议,但是类似这样的事情(setter / getter以外的功能)呢? 我正在尝试说明一个

  • 本章节中,简述自定义类的创建和使用方法,供参考。 创建自定义类 用户可以定义自己的类,通过继承 ThingJS 内部类(比如:Thing 类),对 ThingJS 进行扩展和封装。 我们推荐使用 ES6 语法定义一个类。例如,自定义汽车类 Car。 // 继承 Thing 类 class Car extends THING.Thing { constructor(app) { super(

  • 问题内容: 我解析了.yaml文件,需要以自定义方式解组其属性之一。我正在使用包裹。 有问题的属性按如下方式存储在我的.yaml文件中: 因此,它基本上是一种类型。 但是我需要在哪里定义为: 我的结构: 我试图像这样实现Unmarshaler接口: 我的问题是在函数内部未定义类型,从而在运行时导致nil指针异常。 我如何在此处正确实现Unmarshaler接口? 问题答案: 由于@Volker并未

  • 问题内容: 假设我有一个文件一个简单的Python类定义myClass.py 而且我也有两个测试脚本。所述第一脚本创建类型测试的目的,填充阵列A,和泡菜的结果到一个文件。它立即从文件unpickles它并仍在填充阵列。第二脚本刚刚从文件unpickles,和 未填充的阵列(即A == [])。 为什么是这样? test1.py 和test2.py 问题答案: 这是因为你设置的一类属性,而不是一个实

  • 自定义缓存类使用说明 phpGrace 1.2.1 版本新增了自定义缓存类的功能,您可以将某个相同类型的缓存封装为一个类文件,便于项目的复用 (: 实现步骤 在 phpGrace/caches/ 文件夹下创建您的自定义缓存类文件 文件命名规则 : 缓存类名称.php 类命名规则 : class 缓存类名称 extends \cacheBase{} 使用命名空间 : namespace phpG

  • 问题内容: 两者之间有什么区别,哪个更好使用?为什么? 问题答案: 是interface,哪里是class,并且此类实现接口。 我希望使用第二种形式,这种形式更通用,即如果您不使用特定于方法的方法,则可以将其类型声明为接口类型。使用第二种形式,将实现从实现更改为实现接口的其他类将变得更加容易。 编辑: 由于许多SO用户都评论了这两种形式都可以是接受或的任何方法的参数。但是当我声明方法时,我更喜欢接