为什么我不能将抽象方法实现为私有方法[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

随着抽象类

abstract class A {
    abstract int getInt();
}

和实施

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

我得到的错误是我不能给方法提供比现有方法更少的访问权限。我想将抽象方法实现为私有方法。我明白为什么我不能在Aprivate abstract中定义抽象方法,因为这会使实现无法看到方法,但为什么实现不能简单地使抽象方法变为私有?

理由:

我有两个类使用相同的方法依赖于私有方法:

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;
    }
}

这是导致错误的原因。

java
1个回答
4
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.