或者是static的方法?"/>
”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?
static关键字表面被修饰的方法或者变量可以在没有类的实例的情况下进行访问。 static修饰的方法不能被覆盖,因为它复写方法是运行时动态绑定的,而它修饰的方法是编译时静态绑定的。static修饰的方法或变量与类的实例没任何关系,所以概念上并不适用。 private修饰的方法也是不能被复写的,因为它所修饰的方法或变量只能被当前类使用。继承它的类,访问不了它的private方法或变量,所以更不能复写了
首先是static关键字,static原意是“静态的”。
①static可以修饰内部类,但是不能修饰普通类。静态内部类的话可以直接调用静态构造器(不用对象)。
②static修饰方法, static 方法就是没有 this 的方法。在 static 方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用 static 方法。这实际上正是 static 方法的主要用途。 方便在没有创建对象的情况下来进行调用(方法/变量)。
最常见的static方法就是main,因为所有对象都是在该方法里面实例化的,而main是程序入口,所以要通过类名来调用。还有就是main中需要经常访问随类加载的成员变量。
③static修饰变量,就变成了静态变量,随类加载一次,可以被多个对象共享。
④static修饰代码块,形成静态代码块,用来优化程序性能,将需要加载一次的代码设置成随类加载,静态代码块可以有多个。
Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。
还有私有的方法不能被继承,子类就没有访问权限,肯定也是不能别覆盖的。
class Super {static String greeting() {return "Good night";}String name() {return "Richard";}}class Sub extends Super {static String greeting() {return "Hello";}@OverrideString name() {return "Dick";}}class Test {public static void main(String[] args) {Super s = new Sub();System.out.println(s.greeting() + "," + s.name());}}
运行结果://~~Good night,Dick
这个例子说明“实例方法被覆盖,静态方法被隐藏”
更多推荐
”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?
发布评论