【问题标题】:object to toString method in java with subclasses带有子类的java中toString方法的对象
【发布时间】:2016-02-20 21:33:26
【问题描述】:

哟!我有一个子类任务,我必须使用输出的可打印版本,我添加了 toString() 方法,但似乎该方法并不真正适用于代码的某些部分。我发布了所有三个类此任务:1 级

public class Prostokat {

    int szerokosc;
    int wysokosc;
    public Punkt origin;

    public Prostokat () {
        origin = new Punkt(0,0);
        szerokosc = 0;
        wysokosc = 0;
    }

    public Prostokat (Punkt p) {
        origin = p;
    }

    public Prostokat (Punkt p, int a){
        origin = p;
        szerokosc = a;
        wysokosc = a;   
    }

    public Prostokat (Punkt p, int szerokosc, int wysokosc) {
        origin = p;
        this.szerokosc = szerokosc;
        this.wysokosc = wysokosc;   
    }

    public Prostokat (int x, int y, int szerokosc, int wysokosc) {
        origin = new Punkt(x,y);
        this.szerokosc = szerokosc;
        this.wysokosc = wysokosc;
    }

    public int getSzerokosc() {
        return szerokosc;
    }

    public void setSzerokosc(int szerokosc) {
        this.szerokosc = szerokosc;
    }

    public int getWysokosc() {
        return wysokosc;
    }

    public void setWysokosc(int wysokosc) {
        this.wysokosc = wysokosc;
     }

    public Punkt getOrigin() {
        return origin;
    }

    public void setOrigin(Punkt origin) {
        this.origin = origin;
    }

    public  String toString(Prostokat c) {
        String res = "punkt: " + "(" + origin + ")" + "szerkosc: " + 
            szerokosc + "wysokosc: " + wysokosc;
        return res;
    }

    public int obwod(Prostokat c) {
        return 2*szerokosc + 2*wysokosc;
    }

    public int pole(Prostokat c) {
        return szerokosc*wysokosc;
    }

    public void setOrigin(int i, int j) {
        this.origin = origin;   
    }

    public void setPunkt(Punkt p) {
        this.origin = origin;
    }
}

然后是Punkt的class 2,这里我也用过这个方法:

package prostokatzadanie2;

public class Punkt {

    public int j;
    public int k;

    public Punkt(int j, int k) {
        this.j =j;
        this.k = k;
    }

    public Punkt (int m) {
        this.j =m;
        this.k = m;
    }

    public String toString(Punkt p) {
        String pim = j + "," + k;
        return pim;
    }
}

然后是主类,输出应该从那里工作:

package prostokatzadanie2;

public class zadanie2 {

    public static void main(String[] args) {
        Punkt p1 =new Punkt (1,5);
        Punkt p2 = new Punkt (2);
        Punkt p3 = new Punkt (18,6);
        Prostokat pr1 = new Prostokat();
        Prostokat pr2 = new Prostokat(p1,15);
        Prostokat pr3 = new Prostokat(p2,10,6);
        Prostokat pr4 = new Prostokat(0,75,10,4);
        System.out.println("pr1: " + pr1.toString(pr1));
        System.out.println("pr2: " + pr2.toString(pr2));
        System.out.println("pr3: " + pr3.toString(pr3));
        System.out.println("pr4: " + pr4.toString(pr4));
        System.out.println("==================================================");
        pr1.setWysokosc(26);
        pr1.setOrigin(5,96);
        pr2.setPunkt(p3);
        System.out.println("pr1: " + pr1.toString(pr1));
        System.out.println("pr2: " + pr2.toString(pr2));
        System.out.println("pr3: " + pr3.toString(pr3));
        int pr2Obwod = pr2.obwod(pr2);
        System.out.println("Obwod pr2: " + pr2Obwod);
        int pr3Pole = pr3.pole(pr3);
        System.out.println("Pole pr3: " + pr3Pole);
    }
}

所以输出很不可读,这让我很困惑,我可能忘记正确放置 toString 方法。 这是输出:

pr1: punkt: (prostokatzadanie2.Punkt@139a55)szerkosc: 0wysokosc: 0
pr2: punkt: (prostokatzadanie2.Punkt@1db9742)szerkosc: 15wysokosc: 15
pr3: punkt: (prostokatzadanie2.Punkt@106d69c)szerkosc: 10wysokosc: 6
pr4: punkt: (prostokatzadanie2.Punkt@52e922)szerkosc: 10wysokosc: 4
==================================================
pr1: punkt: (prostokatzadanie2.Punkt@139a55)szerkosc: 0wysokosc: 26
pr2: punkt: (prostokatzadanie2.Punkt@1db9742)szerkosc: 15wysokosc: 15
pr3: punkt: (prostokatzadanie2.Punkt@106d69c)szerkosc: 10wysokosc: 6
Obwod pr2: 60
Pole pr3: 60

感谢您的帮助。 :)

【问题讨论】:

  • 您是否要覆盖Object.toString?如果是这样,为什么要添加参数?
  • 我不知道,可能我想为特定类型的对象添加一个特定的方法,因为我认为 Eclipse 不会理解我想将我的方法分配给什么。 Eclipse 比我想象的要聪明 :)

标签: java eclipse class object tostring


【解决方案1】:

您在两个类中都错误地覆盖了toStringmethod to override in Object takes no parameters

无论如何你都不使用参数,所以只需在两个类中删除参数即可。

public String toString()

如果您将@Override 注释添加到旨在覆盖或实现超类或超接口中的方法的方法,则编译器将在覆盖失败时为您生成错误,为您提供您需要轻松查看的信息该方法实际上并未覆盖您的意图。

【讨论】:

  • 谢谢!使用 override 我不需要参数,但是 Eclipse 并没有真正发出通知,所以乍一看它似乎工作得很好。无论如何,谢谢你
  • 从超类或超接口重载方法是合法的(这是您所做的),因此 Eclipse 不会标记它,即使它不是您想要的。此外,作为问题的提问者,您可以自行决定是否accept exactly one answer,您认为对您最有帮助。
  • 谢谢,知道了。是的,ofc,在这里必须做的事情,我只是不打扰 smtimes :)
【解决方案2】:

在eclipse中使用tab Source -> Generate toString()...没问题!

关于使用字段、Getter 和 Setter 生成构造函数的相同建议位于面板上的同一选项卡中。

【讨论】:

  • 是的,自动生成getter和setter,很方便,必须用toString方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
  • 2021-09-19
  • 1970-01-01
  • 2020-10-08
  • 1970-01-01
  • 2011-04-17
相关资源
最近更新 更多