为什么我不能将抽象方法实现为私有方法

时间:2019-02-20 15:14:23

标签: java

使用抽象类

abstract class A {
    abstract int getInt();
}

和实施

public class AImp extends A{
    @Override
    private int getInt() {
        return 1;
    }
}

我得到一个错误,就是我无法赋予该方法比原来的方法更少的访问权限。我想将抽象方法实现为私有方法。我了解为什么我无法在Aprivate abstract中定义抽象方法,因为这将使实现无法看到该方法,但是为什么实现不能简单地将抽象方法设为私有?

RATIONALE:

我有两个类,它们的方法相同,这取决于私有方法:

public class AImp1{
    private int getInt() {
        return 1;
    }
    protected void print10Int() {
        for (int i = 0; i < 10; i++){
            System.out.println(getInt());
        }
    }
}

public class AImp2{
    private int getInt() {
        return 0;
    }
    protected void processInt() {
        for (int i = 0; i < 10; i++){
            System.out.println(getInt());
        }
    }
}

为了避免代码重复,我想将该方法放在抽象超类中,但这也迫使我也将私有方法也作为抽象超类的一部分:

abstract class A {
    abstract int getInt();

    protected void print10Int() {
        for (int i = 0; i < 10; i++){
            System.out.println(getInt());
        }
    }
}

由于我希望使用与之前相同的AImp1AImp2,因此我想将getInt设为私有:

public class AImp1 extends A{
    @Override
    private int getInt() {
        return 1;
    }
}

这是导致错误的原因。

1 个答案:

答案 0 :(得分:4)

因为它被用作类的签名/接口的一部分。假设我知道A类的子代将具有方法Foo(),但是当我尝试访问扩展了A类的B类的Foo()时,由于它是私有的,所以我不能。没道理。