java 中带有子类的 toString 方法的对象
object to toString method in java with subclasses
哟!我有一个关于 subclasses 的任务,我必须使用输出的可打印版本,并且我添加了方法 toString(),但是似乎该方法并不真正适用于 [=] 的某些部分26=] post 所有三个 classes 用于此任务:Class 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;
}
}
然后class2 for Punkt
,这里我也是用这个方法:
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;
}
}
然后是主要 class,输出应该从那里开始:
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
感谢您的帮助。 :)
您在 类 中错误地覆盖了 toString
。 method to override in Object
takes no parameters.
无论如何你都不使用该参数,所以只需在 类.
中删除该参数即可
public String toString()
如果您将 @Override
注释添加到旨在覆盖或实现超类或超接口中的方法的方法,则编译器将在覆盖失败时为您生成错误,为您提供信息需要轻松地看到该方法实际上并没有覆盖您的意图。
在 Eclipse 中使用选项卡 Source -> Generate toString()... 没问题!
关于使用字段、Getter 和 Setters 生成构造函数的相同建议位于面板上的同一选项卡中。
哟!我有一个关于 subclasses 的任务,我必须使用输出的可打印版本,并且我添加了方法 toString(),但是似乎该方法并不真正适用于 [=] 的某些部分26=] post 所有三个 classes 用于此任务:Class 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;
}
}
然后class2 for Punkt
,这里我也是用这个方法:
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;
}
}
然后是主要 class,输出应该从那里开始:
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
感谢您的帮助。 :)
您在 类 中错误地覆盖了 toString
。 method to override in Object
takes no parameters.
无论如何你都不使用该参数,所以只需在 类.
中删除该参数即可public String toString()
如果您将 @Override
注释添加到旨在覆盖或实现超类或超接口中的方法的方法,则编译器将在覆盖失败时为您生成错误,为您提供信息需要轻松地看到该方法实际上并没有覆盖您的意图。
在 Eclipse 中使用选项卡 Source -> Generate toString()... 没问题!
关于使用字段、Getter 和 Setters 生成构造函数的相同建议位于面板上的同一选项卡中。