gpt4 book ai didi

java - 为什么我不能将抽象方法实现为私有(private)方法

转载 作者:行者123 更新时间:2023-12-01 17:46:20 27 4
gpt4 key购买 nike

使用抽象类

abstract class A {
abstract int getInt();
}

以及实现

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

我收到错误消息,无法为该方法提供比它已有的访问权限更少的权限。我想将抽象方法实现为私有(private)方法。我明白为什么我不能在 A 中定义抽象方法和private abstract ,因为这会使实现无法看到该方法,但是为什么实现不能简单地将抽象方法设为私有(private)呢?

基本原理:

我有两个具有相同方法的类,该方法依赖于私有(private)方法:

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

为了避免代码重复,我想将该方法放入抽象父类(super class)中,但这迫使我也将私有(private)方法作为抽象父类(super class)的一部分:

abstract class A {
abstract int getInt();

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

因为我想要同样的AImp1AImp2和以前一样,我想做 getInt私有(private):

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

这就是导致错误的原因。

最佳答案

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

关于java - 为什么我不能将抽象方法实现为私有(private)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54789574/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com