为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

茅侃侃 2022-06-30 11:52:09
使用抽象类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;    }}这就是导致错误的原因。
查看完整描述

1 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

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



查看完整回答
反对 回复 2022-06-30
  • 1 回答
  • 0 关注
  • 121 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信