gpt4 book ai didi

java - 在Java中如何在不在父类中声明该变量的情况下引用子类变量?

转载 作者:搜寻专家 更新时间:2023-11-01 02:01:11 26 4
gpt4 key购买 nike

public class MyTest {
public static void main(final String[] args) {
B b = new B();
b.print();
}
}

class A {
private final int x = 5;

protected int getX() {
return x;
}

public void print() {
System.out.println(getX());
}
}

class B extends A {
private final int x = 10;

@Override
protected int getX() {
return x;
}


}

在这个例子中,我需要在父类中打印子类值。它工作正常。没有任何问题。现在它正在打印 10。但我不想在父级中定义该属性 class A .

因为在这个例子中这个 x数据类型非常简单。所以没问题。但实时我想使用其他数据类型,可能是另一个类变量或 List<something>拥有海量数据。

所以最终我不想将该值存储在 Class A 中.因为是冗余数据。它会在我的 Hibernate 中变慢。请让我知道,如何在不在父类中声明变量的情况下实现这一点。但是我仍然需要在父类中使用子类变量。

最佳答案

抽象你的类 A 和 getX();方法。

public class Test {
public static void main(final String[] args) {
B b = new B();
b.print();
}
}

abstract class A {

protected abstract int getX();

public void print() {
System.out.println(getX());
}
}

class B extends A {
private final int x = 10;

@Override
protected int getX() {
return x;
}
}

并覆盖 toString 方法来代替您的打印方法

@Override
public String toString() {
return String.valueOf(getX());
}

最终代码

public class Test {
public static void main(final String[] args) {
B b = new B();
System.out.println(b);
}
}

abstract class A {

protected abstract int getX();

@Override
public String toString() {
return String.valueOf(getX());
}
}

class B extends A {
private static final int X = 10;

@Override
protected int getX() {
return X;
}
}

您还可以将 x 变量定义为静态

但正如 Andrew Tobilko 所说,如果 A 不代表有状态实体,您也可以考虑使用接口(interface)。

混合使用接口(interface)和抽象类肯定是适合您的情况的最佳解决方案

public class Test {
public static void main(final String[] args) {
B b = new B();
System.out.println(b);
}
}

interface MyInterface {
int getX();
}

abstract class A implements MyInterface{
@Override
public String toString() {
return String.valueOf(getX());
}
}

class B extends A {
private static final int X = 10;

@Override
public int getX() {
return X;
}
}

关于java - 在Java中如何在不在父类中声明该变量的情况下引用子类变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46569089/

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