首页 > 试题广场 >

”static”关键字是什么意思?Java中是否可以覆盖(o

[问答题]
”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?
zll头像 zll
static表示静态的意义,它可以修饰一个变量,一个方法,被其修饰的变量被称为类变量,被其修饰的方法成为类方法,其随着类的加载而被加载。
无法重写被private修饰的方法,因为被private修饰的父类方法在子类中是不可见的。
static修饰的方法是静态绑定的,而方法覆盖是为了实现多态,是动态绑定,所以static修饰的方法不需要被覆盖
发表于 2016-03-18 22:39:32 回复(4)
class Super{   
   static String greeting(){   
      return "Good night";   
  }   
  
  String name(){   
     return "Richard";   
  }   
}   
  
class Sub extends Super{   
   static String greeting(){   
     return "Hello";   
  }   
  
  String 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
这个例子说明“实例方法被覆盖,静态方法被隐藏”
发表于 2015-11-24 13:13:36 回复(8)

首先是static关键字,static原意是“静态的”。

①static可以修饰内部类,但是不能修饰普通类。静态内部类的话可以直接调用静态构造器(不用对象)。


②static修饰方法, static 方法就是没有 this 的方法。在 static 方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用 static 方法。这实际上正是 static 方法的主要用途。 方便在没有创建对象的情况下来进行调用(方法/变量)。

最常见的static方法就是main,因为所有对象都是在该方法里面实例化的,而main是程序入口,所以要通过类名来调用。还有就是main中需要经常访问随类加载的成员变量。

③static修饰变量,就变成了静态变量,随类加载一次,可以被多个对象共享。

④static修饰代码块,形成静态代码块,用来优化程序性能,将需要加载一次的代码设置成随类加载,静态代码块可以有多个。

Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。
还有私有的方法不能被继承,子类就没有访问权限,肯定也是不能别覆盖的。
发表于 2016-08-21 20:26:34 回复(2)
private方法只能由此类中的方法调用,而override是指子类对父类的方法进行重写,所以无法重写类中的私有方法。
发表于 2015-12-09 22:51:42 回复(0)
static是静态的意思,用于修饰成员变量和成员方法,被静态修饰的成员不能访问非静态的成员,静态成员属于类,随着类的加载而加载,可以直接被类名调用。重写是子类对父类中的方法进行重新编写,即外壳不变,核心重写,要求子类与父类方法的返回值,方法名,参数值,参数类型必须一致,子类的访问权限大于等于父类,子类方法不能抛出比父类方法更多的异常。private方法是类的私有方法,只能在类的内部被访问,不参与继承,所以不能被重写。而静态方法不能被重写分为两方面原因:一方面重写是为了实现子类实例的特殊化,但静态方法是属于类本身的,不属于实例,所以不能被重写;另一方面重写的前提是实例调用方法,由其实际类型所决定,是动态绑定的,但静态方法的调用却是由声明类型所决定,是静态绑定的,所以不能被重写只能被隐藏。
编辑于 2018-05-15 21:34:09 回复(0)
补充一下,java里的static 还可以修饰导入的包,import static java.lang.Integer;表示导入Integer类中所有的静态方法
发表于 2017-03-08 17:42:12 回复(0)
上述问题解答,Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。static方法跟类的任何实例都不相关,所以概念上不适用。其中方法覆盖是基于运行时动态绑定的,什么叫做运行时动态绑定,用什么用处,还有就是什么叫做静态绑定,他的作用又是什么,求解答
发表于 2017-04-12 22:13:31 回复(1)
静态绑定:在编译期就被JAVA虚拟机明确了要指向哪个类的方法或变量; 动态绑定:在运行期间,JVM根据被引用的对象去指定相应的方法和变量; static修饰的方法或变量与类的实例无关,而覆盖是多态的实现,而多态涉及类实例的转换,所以不能覆盖;也能理解为static、private、final是静态绑定,而覆盖是动态绑定。
发表于 2020-09-26 21:14:50 回复(2)
Static表示静态的意思,可用于修饰成员变量和成员函数,被静态修饰的成员函数只能访问静态成员,不可以访问非静态成员。静态是随着类的加载而加载的,因此可以直接用类进行访问。 重写是子类中的方法和子类继承的父类中的方法一样(函数名,参数,参数类型,反回值类型),但是子类中的访问权限要不低于父类中的访问权限。重写的前提是必须要继承,private修饰不支持继承,因此被私有的方法不可以被重写。静态方法形式上可以被重写,即子类中可以重写父类中静态的方法。但是实际上从内存的角度上静态方法不可以被重写。
发表于 2017-01-18 01:27:47 回复(0)
static修饰符修饰的变量,和方法,使得该变量和方法可以在类没有实例化的情况下调用。方法不能被重载,static修饰的方法是编译时静态绑定的,尽量少用,会增加内存负担。小程序中可以使用,对于高并发的程序,少量使用
编辑于 2016-03-07 22:34:00 回复(2)
static是静态的意思,用于修饰成员变量和成员方法,被静态修饰的成员不能访问非静态的成员,静态成员属于类,随着类的加载而加载,可以直接被类名调用。重写是子类对父类中的方法进行重新编写,即外壳不变,核心重写,要求子类与父类方法的返回值,方法名,参数值,参数类型必须一致,子类的访问权限大于等于父类,子类方法不能抛出比父类方法更多的异常。private方法是类的私有方法,只能在类的内部被访问,不参与继承,所以不能被重写。重写是为了实现子类实例的特殊化,但静态方法是属于类本身的,不属于实例,所以不能被重写
发表于 2020-06-17 18:24:15 回复(0)

Private 修饰的只能在类中访问,继承的是没有权限访问的,static修饰的方法属于类本身,通过实例化一个对象来访问的时候,访问的也是类中的方法,而不是实例化对象中的方法,所以不能被重写

发表于 2019-05-23 15:05:50 回复(0)
被static修饰的成员变量和成员方法独立于该类的任何对象。即它不依赖类特定的实例,被类的所有实例共享。
发表于 2018-10-08 16:03:10 回复(0)
private,static不可以被覆盖
发表于 2017-07-18 22:16:48 回复(0)
static是静态修饰符,修饰的成员变量或方法属于类级别的,即可以通过静态成员变量或方法所属的类直接访问,而不需要将类实例化后才能访问。此外static还可以修饰内部类。
覆盖是通过继承基类并重写基类的相同名称和相同参数列表的方法实现的,而private方法不能被其他类访问,因此不能被覆盖。
此外,覆盖是基于运行时动态绑定的,而static方法时基于编译时静态绑定的,因此static方法也不能被覆盖。
编辑于 2016-09-12 09:18:44 回复(1)
“static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。
Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。static方法跟类的任何实例都不相关,所以概念上不适用。
发表于 2015-10-29 12:10:41 回复(0)
Static表示静态的意思,可用于修饰成员变量和成员函数,被静态修饰的成员函数只能访问静态成员,不可以访问非静态成员。静态是随着类的加载而加载的,因此可以直接用类进行访问。 重写是子类中的方法和子类继承的父类中的方法一样(函数名,参数,参数类型,反回值类型),但是子类中的访问权限要不低于父类中的访问权限。重写的前提是必须要继承,private修饰不支持继承,因此被私有的方法不可以被重写。静态方法形式上可以被重写,即子类中可以重写父类中静态的方法。但是实际上从内存的角度上静态方法不可以被重写。
编辑于 2016-09-05 16:02:22 回复(19)
<p>static 静态的</p><p>static用于修饰方法或属性。被修饰的方法或属性由该类的所有实例共享。</p><p>不能重写private方法或static方法</p>
发表于 2022-08-13 15:15:19 回复(0)
static是静态关键字,被它修饰的属性方***在类加载前执行,private本类访问
编辑于 2021-12-11 23:02:31 回复(0)
static表示静态的,static修饰的变量或者方法,可以直接使用类名.方式调用,而不需要对象来调用,因此static是类级别的。既是类级别的,static修饰的变量和方***在当前的字节码文件由jvm加载时,直接加载到方法区内存中,属于静态绑定,而覆盖属于动态绑定,两者是不同时期的。因此static不能覆盖 private表示私有的,由private修饰的变量或者方法,其作用域/适用范围仅在当前类中,除了当前类,其他地方无法使用(包括子类)。而覆盖又称重写,是发生在子类覆盖父类的方法,但private不能由子类适用,因此private修饰的变量和方法也就无法覆盖。
发表于 2021-04-25 13:10:44 回复(0)