可以根据java中的访问权限重载方法吗?

时间:2011-05-15 05:33:46

标签: java methods

例如,一个类有public do,打包do,protected do和private do。如果一个类调用的实例得到私有的,如果一个子类调用它,那么它会受到保护,如果同一个包调用它,那么它会被打包,如果还有什么调用它,它会被公开?

4 个答案:

答案 0 :(得分:3)

没有

  

声明是编译时错误   两个方法与override等效   一个类中的签名(在下面定义)。   如果两种方法具有相同的签名   他们有相同的名称和论点   类型。

(来自JLS §8.4.2

答案 1 :(得分:2)

class A
{
    public Object do() { ... }
    protected Object do() { ... }
    Object do() { ... }
    private Object do() { ... }
}

没有。这不会在有或没有子类的情况下编译。也不应该期待它。编译器如何知道调用哪个方法?这是不可能的。

为了使它更清晰一点,一个更有特色的重载 - 一个返回除Object以外的其他类型的重载甚至不是可接受的重载,因为编译器仍然无法确定调用哪个方法。 形式的重载甚至更不可接受。

答案 2 :(得分:1)

没有。这是一个包含其标识的元素(就像您不能重载方法的名称或返回类型一样)。您只能重载传递给方法的变量。

如果您尝试将方法设为public,其超级方法是私有的,则会出现编译器错误,并且您的程序将无法运行。

答案 3 :(得分:0)

不,因为这些方法都有相同的method signature

Definition: Two of the components of a method declaration comprise the method 
signature — the method's name and the parameter types.

编译器只能根据签名区分方法。