【问题标题】:java parent construct function depend on its different child field value?java父构造函数依赖于其不同的子字段值?
【发布时间】:2021-06-09 07:58:04
【问题描述】:

在 python 中我可以这样做

class A:
    x = 3
    def __init__(self):
        do_something(self.x)

class B(A):
    x = 4

B()

但是java代码不能。 java静态字段只属于自己。


public class A {
    static int x = 3;

    public A() {
        do_somthing(x);  
        // because every child may do similar thing.  An depend on its own x

    }
  

public class B extends A {
    static int x = 4;

    public B() {
        super();
    }

但我认为 java 可以以不同的方式实现相同的目标。 (使父构造函数依赖于子类字段。)

【问题讨论】:

    标签: java constructor static


    【解决方案1】:
    do_somthing(x); 
    

    将使用A 类的x 变量,因为实例或静态变量没有多态性。

    如果你想要多态,你可以用 instance 方法包装对x 的访问:

    public class A {
        static int x = 3;
    
        public int getX () {
            return A.x;
        }
    
        public A() {
            do_somthing(getX ());  
            // because every child may do similar thing.  An depend on its own x
    
        }
      
    
    public class B extends A {
        static int x = 4;
    
        public int getX () {
            return B.x;
        }
    
        public B() {
            super();
        }
    }
    

    getX() 的调用将执行AgetX()(并返回Ax)或BgetX()(并返回B 的@ 987654334@),取决于调用它的实例的运行时类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多