编程语言
首页 > 编程语言> > java – 父/子方法覆盖

java – 父/子方法覆盖

作者:互联网

考虑以下两个具体类:

public class A {
  protected void foo() {        
    System.out.println("A foo");
    bar();
  }

  protected void bar() {
    System.out.println("A bar");
  }
}

public class B extends A {
  @Override
  protected void foo() {
    super.foo();    
    System.out.println("B foo");
  }

  @Override
  protected void bar() {
    System.out.println("B bar");
  }
}


public class Test {

  public static void main(String[] args) {
    B b = new B();
    b.foo();
  }
}

输出将是:

A foo
B bar
B foo

哪个是对的.但是,如果我们需要结果如果:

A foo
A bar
B foo

我们必须覆盖这两种方法.

Java Object模型中是否有任何解决方案?

解决方法:

您应该使用组合而不是继承.
例如

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

class A implements Parent {
    public void foo() {
        System.out.println("A foo");
        bar();
    }

    public void bar() {
        System.out.println("A bar");
    }
}


interface Parent {
    void foo();
    void bar();
}

class B implements Parent {

Parent wrapped;

public B(Parent p) {
    this.wrapped = p;
}

@Override
public void foo() {
    wrapped.foo();
    System.out.println("B foo");
}

@Override
public void bar() {
    System.out.println("B bar");
}

}

标签:java,override,polymorphism,object-model,method-overriding
来源: https://codeday.me/bug/20190624/1276545.html