猿问

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

使用抽象类


abstract class A {

    abstract int getInt();

}

和实施


public class AImp extends A{

    @Override

    private int getInt() {

        return 1;

    }

}

我得到的错误是我不能给这个方法比它已经拥有的更少的访问权限。我想将抽象方法实现为私有方法。我理解为什么我不能在Aand中定义抽象方法private 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());

        }

    }

}

由于我想要AImp1和AImp2以前一样,我想getInt私有化:


public class AImp1 extends A{

    @Override

    private int getInt() {

        return 1;

    }

}

这就是导致错误的原因。


茅侃侃
浏览 155回答 1
1回答

慕标琳琳

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

相关分类

Java
我要回答