Java 从抽象类扩展到字符串方法的类不';t工作:/
这是主要的演示类Java 从抽象类扩展到字符串方法的类不';t工作:/,java,abstract,Java,Abstract,这是主要的演示类 public class Ongoing{ public static void main(String[] args){ ExtendsAbstract josh = new ExtendsAbstract(5, "donkey"); System.out.println(josh.toString()); } } 这是从抽象类扩展而来的类,使用tostring方法的类将不起作用 public class ExtendsAbstract
public class Ongoing{
public static void main(String[] args){
ExtendsAbstract josh = new ExtendsAbstract(5, "donkey");
System.out.println(josh.toString());
}
}
这是从抽象类扩展而来的类,使用tostring方法的类将不起作用
public class ExtendsAbstract extends Abstract{
private String t;
public ExtendsAbstract(int y, String t){
super(y);
this.t = t;
}
public String getString(){
return this.t;
}
public int getInt(){
return super.getInt();
}
public String toString(int y){
return(/*super.toString(y)+*/"The integer is "+ y) ;
}
}
这是抽象类
public abstract class Abstract{
private int y;
public Abstract(int y){
this.y = y;
}
public int getInt(){
return y;
}
public String toString(int y){
return("The integer is :"+y);
}
}
每次我尝试从扩展类访问toString方法时,它只打印出我认为是内存地址的内容。我甚至没有搞乱抽象类,它仍然这样做,有人知道为什么吗?还有一个关于抽象类的问题,它们带来了什么好处,仅仅是内存吗?因为您不能从它访问私有成员,所以它不是和普通类一样,只是有更多的限制吗?目前,发生的事情是调用对象的toString(),如下所示:
ClassName@HashCode
您可以这样做来打印:(在toString()处添加@Override)。另外,不需要调用josh.toString()。您只需调用System.out.println(josh)代码>(魔法将发生,它将调用toString)
“toString()”方法必须如下所示:
@Override
public String toString(){
return("The integer is "+ y) ;
}
“@Override”注释用于编译器检查,不是必需的。
关于注释的更多信息:假设您有这样定义的类Dad
和Son
public class OverLoadedToString {
public static void main(String[] args) {
Son son = new Son();
son.test();
son.test(90);
}
}
class Dad {
void test() {
System.out.println("Dad - test");
}
}
class Son extends Dad {
void test(int testTime) {
System.out.println("Son - test1" + testTime);
}
}
Son
类正在扩展Dad
,因此没有参数的test()
将继承到Son
,就像您的ExtendsAbstract
类有toString()
类,没有从Object
类继承的参数一样(Java中的每个类都继承Object类)
然后在子类中,我添加了新的方法test(int-testTime)
,它有一个参数,使得test()
和test(int-testTime)
不同,这被称为方法重载。在您的ExtendsAbstract
类中有两个toString
方法,一个是继承的无参数方法,另一个是您定义的方法
现在让我向您展示继承流
对象-->抽象-->ExtendsAbstract
对象类toString()
方法打印内存地址,我们可以在类中重写它以更改其定义,您可以返回任何需要的字符串。但是在Abstract
类或ExtendsAbstract
类中,您都没有覆盖它,因此在这两个类中,它都会打印内存地址
现在,在您的正在进行的
类中,您正在调用始终打印内存地址的对象类toString()
方法。您的困惑在于,您认为您已经重写了toString()
方法,但实际上您刚刚重载了它,并且为预期的输出调用了错误的方法
参考:您正在调用toString的java.lang.Object实现(所有java类都继承自此)。您的toString实现需要一个整数。
public class OverLoadedToString {
public static void main(String[] args) {
Son son = new Son();
son.test();
son.test(90);
}
}
class Dad {
void test() {
System.out.println("Dad - test");
}
}
class Son extends Dad {
void test(int testTime) {
System.out.println("Son - test1" + testTime);
}
}