我有几个具有独特静态变量的子类,在这种情况下称为' x'。 所有这些子类都以相同的方式使用静态var,因此我希望减少代码重复并将功能放在超类中。 在这种情况下,方法' getX'在超级班。从这里我想要返回x的值。现在我面临的问题是它使用超类的x值而不是子类的值。如何从超类中访问子类的x值?
public class Playground {
public static void main(String[] args) {
Parent parent = new Parent();
Child child = new Child();
Child1 child1 = new Child1();
System.out.println("Parent.x " + parent.x);
System.out.println("child.x " + child.x);
System.out.println("child.x " + child1.x);
System.out.println("get x: " + parent.getX());
System.out.println("get x: " + child.getX());
}
}
class Parent {
static String x = "static of parent";
String y = "instance of parent";
String getX() {
return x;
}
}
class Child extends Parent {
static String x = "static of child";
String y = "instance of child";
}
class Child1 extends Parent {
static String x = "static of child1";
String y = "instance of child";
}
此代码打印出来:
Parent.x static of parent
child.x static of child
child.x static of child1
get x: static of parent
get x: static of parent
< - 这里应该是儿童的静态
希望有人可以帮助我。
干杯
答案 0 :(得分:2)
尝试将getX方法添加到子级。像这样:
class Child extends Parent {
static String x = "static of child";
String y = "instance of child";
String getX() {
return x;
}
}
答案 1 :(得分:2)
解决方案可能是在Parent中没有静态,而是实例字段。
class Parent{
private final X x
public Parent(X x){
this.x = x;
}
public X getX() {
return x;
}
}
然后在您的孩子中,您仍然可以拥有静态,但是您可以在构造函数
中传递它class Child extends Parent {
static final X x = ....
public Child() {
super(x);
}
}
答案 2 :(得分:1)
在子类中添加getX方法。 父getX方法指向父类的静态变量。
答案 3 :(得分:1)
您尝试的是违反基本OOP原则信息隐藏 / 封装。
没有其他类应该知道类如何存储或处理其属性(又名变量或字段)。这包括clases不应该有 getter 和 setter (正如@RosárioPereiraFernandes所建议的那样)
当该类表示数据传输对象(DTO)时,此规则有一个例外,它具有(几乎)没有业务逻辑并且只提供对结构化数据的访问。 DTO应该有 getters 和(不常见) setters 。
其他类应提供与业务相关名称的方法来修改其内部状态(其成员变量的值):
WITH [A] AS
(
SELECT (startDate + startTime) AS time1
FROM [Date]
)
SELECT
CONVERT(datetime, A.time1, 20)
FROM
[A]
答案 4 :(得分:1)
据我所知,无法从父类访问子变量。
但您可以覆盖子类
中的String getX()
@Override
protected String getX() {
return x;
}
然后Java调用“最低”getX()
方法
我会将您的示例编写为不同的代码:
public class Playground {
private static Parent parent = new Parent("static of parent");
private static Child child = new Child("static of child");
private static Child1 child1 = new Child1("static of child1");
public class Playground {
private static Parent parent = new Parent("static of parent");
private static Child child = new Child("static of child");
private static Child child1 = new Child("static of child1");
public static void main(String[] args) {
System.out.println("Parent.x " + parent.getX());
System.out.println("child.x " + child.getX());
System.out.println("child.x " + child1.getX());
System.out.println("get x: " + parent.getX());
System.out.println("get x: " + child.getX());
}
}
class Parent {
private String x;
public Parent(String x) {
this.x = x;
}
public String getX() {
return this.x;
}
}
class Child extends Parent {
protected Child(String x) {
super(x);
}
}
- >这将带来以下输出:
Parent.x static of parent
child.x static of child
child.x static of child1
get x: static of parent
get x: static of child
问你是否有问题