我们可以在 Java 中覆盖私有或静态方法吗
java 8object oriented programmingprogramming
不,我们不能在 Java 中覆盖私有或静态方法。
Java 中的私有方法对任何其他类都是不可见的,这将它们的范围限制在声明它们的类中。
示例
让我们看看当我们尝试覆盖私有方法时会发生什么 −
class Parent { private void display() { System.out.println("Super class"); } } public class Example extends Parent { void display() // 尝试覆盖 display() { System.out.println("Sub class"); } public static void main(String[] args) { Parent obj = new Example(); obj.display(); } }
输出
输出如下 −
Example.java:17: error: display() has private access in Parent obj.method(); ^ 1 error
该程序给出编译时错误,表明 display() 在 Parent 类中具有私有访问权限,因此无法在子类 Example 中重写。
如果将方法声明为静态,则它是类的成员,而不是属于类的对象。无需创建类的对象即可调用它。静态方法还具有访问类的静态数据成员的权限。
示例
让我们看看当我们尝试在子类中重写静态方法时会发生什么
class Parent { static void display() { System.out.println("Super class"); } } public class Example extends Parent { void display() // 尝试覆盖 display() { System.out.println("Sub class"); } public static void main(String[] args) { Parent obj = new Example(); obj.display(); } }
输出
这会生成编译时错误。输出如下 −
Example.java:10: error: display() in Example cannot override display() in Parent void display() // trying to override display() ^ overridden method is static 1 error