不可以,我们不能覆盖Java中的私有或静态方法。
Java中的私有方法对任何其他类都不可见,从而将其范围限制在声明它们的类中。
让我们看看尝试覆盖私有方法时会发生什么-
class Parent { private void display() { System.out.println("Super class"); } } public class Example extends Parent { void display() // trying to override 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() // trying to override 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