有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

继承强制在Java中使用基类方法

假设我有两个类BaseDerived

public class Base {
    public Base() { }
    public void methodA() {
        System.out.println("Base: methodA");
        methodB();
    }
    public void methodB() {
        System.out.println("Base: methodB");
    }
}
public class Derived extends Base {
    public Derived() { }
    public void methodA() {
        super.methodA();
        System.out.println("Derived: methodA");
    }
    public void methodB() {
        System.out.println("Derived: methodB");
    }
}

现在有了这个:

Base d = new Derived();
d.methodA();

将打印:

Base: methodA
Derived: methodB
Derived: methodA

我的问题是:有没有可能强迫d.methodA()使用Base.methodB()我想把代码打印出来:

Base: methodA
Base: methodB
Derived: methodA
<>对于C++中的那些知识,这可以用^{}在^ {CD1>}类中完成。Java中有类似的语言吗

我几乎可以肯定之前有人问过这个问题,但我找不到任何东西,如果这是重复的,我很抱歉


共 (2) 个答案

  1. # 1 楼答案

    不行。在C++语言中,所有Java方法都是“虚拟的”。所以你可以这样做:

    public class Base {
    
        public void methodA() {
            System.out.println("Base: methodA");
            baseMethodB();
        }
    
        public void methodB() {
            baseMethodB();
        }
    
        private void baseMethodB() {
            System.out.println("Base: methodB");
        }
    }
    
  2. # 2 楼答案

    我认为,通过将父类中的功能分解到它自己的方法中,您可以实现您想要的。不是你看的方向而是你想要的:

    public class Base {
        public Base() { }
        public void methodA() {
            System.out.println("Base: methodA");
            methodBInner();
        }
    
        public void methodB() {
            methodBInner();
        }
    
        private void methodBInner() {
            System.out.println("Base: methodB");        
        }
    }