65.9K
CodeProject 正在变化。 阅读更多。
Home

Java 中私有或静态方法可以被重写吗?你需要知道的内容

starIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

1.00/5 (3投票s)

2024年8月31日

CPOL

2分钟阅读

viewsIcon

2438

在 Java 中,方法重写是一个基本概念,它允许子类提供对其超类中已定义的方法的特定实现。 然而,对于私有方法和静态方法,规则有所不同。

1. 理解 Java 中的方法重写

在深入研究私有方法和静态方法之前,重要的是要了解 Java 中方法重写的基础知识。

1.1 什么是方法重写?

当子类为其超类中已定义的方法提供特定的实现时,就会发生方法重写。 这允许子类自定义从父类继承的方法的行为。
  • 子类中的方法必须具有与超类中的方法相同的名称、返回类型和参数。
  • 重写的方法不能具有比超类中的方法更严格的访问修饰符。
  • 重写的方法不能具有比超类中的方法更严格的访问修饰符。
示例
class Animal {
    void makeSound() {
        System.out.println("Animal makes a sound");
    }
}

class Dog extends Animal {
    @Override
    void makeSound() {
        System.out.println("Dog barks");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog();
        myDog.makeSound(); // Outputs: Dog barks
    }
}

2. 私有方法和方法重写

私有方法在定义它们的类之外不可访问。 因此,它们不能在子类中被重写。 当子类定义一个与超类中的私有方法同名的方法时,它不被视为重写,而是子类特有的新方法。

2.1 为什么私有方法不能被重写

私有方法对除自身以外的任何类都是隐藏的。 Java 编译器将私有方法视为定义它们的类的一部分,而不是类层次结构的一部分。 因此,子类无法访问或重写这些方法。
示例
class Parent {
    private void privateMethod() {
        System.out.println("Private method in Parent");
    }
}

class Child extends Parent {
    // This is not an override, but a new method in Child
    private void privateMethod() {
        System.out.println("Private method in Child");
    }
}

public class Main {
    public static void main(String[] args) {
        Parent obj = new Child();
        // obj.privateMethod(); // Compilation error: privateMethod() has private access in Parent
    }
}

2.2 在子类中访问私有方法

虽然子类不能重写私有方法,但它们可以拥有自己的同名私有方法。 这不会影响超类的私有方法,并且被认为是具有相同名称但不同作用域的方法。

3. 静态方法和方法重写

静态方法属于类,而不是类的实例。 它们在编译时基于引用类型而不是对象类型进行解析。 因此,静态方法不能以传统意义上的方式被重写。

3.1 静态方法隐藏

当子类定义一个与超类中的静态方法同名的静态方法时,它被称为静态方法隐藏,而不是重写。 子类中的方法隐藏了超类中的方法。
示例
class Parent {
    static void staticMethod() {
        System.out.println("Static method in Parent");
    }
}

class Child extends Parent {
    static void staticMethod() {
        System.out.println("Static method in Child");
    }
}

public class Main {
    public static void main(String[] args) {
        Parent.staticMethod(); // Outputs: Static method in Parent
        Child.staticMethod();  // Outputs: Static method in Child
    }
}

3.2 静态方法隐藏的含义

静态方法隐藏意味着调用的方法由引用的类确定,而不是实际的对象。 如果理解不正确,这可能会导致混淆。

4. 结论

总之,Java 中的私有方法不能被重写,因为它们在其自身的类之外是不可访问的。 静态方法也不能被重写,但可以在子类中被隐藏。 理解这些规则对于在 Java 中进行有效的面向对象编程至关重要。
如果您有任何问题或需要进一步说明 Java 中的方法重写、私有方法或静态方法,请在下面评论!

阅读更多文章: 在 Java 中,私有方法或静态方法可以被重写吗?你需要知道的

© . All rights reserved.