gpt4 book ai didi

java - 在抽象类中声明具体方法

转载 作者:行者123 更新时间:2023-11-30 09:22:49 25 4
gpt4 key购买 nike

我需要为抽象类的所有具体方法覆盖 toString() 方法——在所有情况下都完全相同。所以这就是我想要做的(SomeEnum 是一个单独的类,它只有一个枚举声明):

抽象类

public abstract class ClassA {
protected SomeEnum name;
protected int some_int;

// Constructor here

@Override
public String toString() {
return name.toString().toLowerCase() + " > " + Integer.toString(some_int);
}
}

具体类(示例)

public class ClassB extends ClassA {
private static final int some_const = 1;
private SomeEnum name = SomeEnum.ENUM_1;

public ClassB(int some_int) {
super(some_const, some_int);
}
}

出于某种原因如果没有运行时异常,我不能那样做,我需要在抽象类中声明抽象方法,然后提供(完全相同的)toString()< 的实现 在每个具体类实现中。

这种方法有什么问题?

编辑: 我得到的异常是 NullPointerException,它随后将我指向 ClassA.toString()

最佳答案

不是将 name 声明为 ClassB 上的字段,而是在 ClassB 的构造函数中分配 someEnum 所以它使用来自父类(super class)型的字段。父类(super class)型无权访问子类型上的 name 字段,这会在调用 toString 时导致 NPE。

public ClassB(int some_int) {
super(some_const, some_int);
this.name = SomeEnum.ENUM_1;
}

完整示例

B 级

public class ClassB extends ClassA {
private static final int some_const = 1;

public ClassB(int some_int) {
super(some_const, some_int);
this.name = SomeEnum.ENUM_1;
}

public static void main(String[] args) {
ClassB b = new ClassB(4);
b.toString();
}
}

A 级

public abstract class ClassA {
protected SomeEnum name;
protected int some_int;

public ClassA(int someConst, int some_int2) {
}

@Override
public String toString() {
return name.toString().toLowerCase() + " > "
+ Integer.toString(some_int);
}

}

关于java - 在抽象类中声明具体方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16315287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com