java静态方法能被继承吗?原因?
发布网友
发布时间:2022-04-22 23:51
我来回答
共5个回答
热心网友
时间:2023-07-10 11:49
一,java中静态属性和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏.
二,原因:
1, 静态方法和属性是属于类的,调用的时候直接通过类名;方法名完成对,不需要继承机制即可以调用;
(1)如果子类里面定义了静态方法和属性,则这时候父类的静态方法或属性称之为"隐藏";
(2)如果你想要调用父类的静态方法和属性,直接通过父类名.方法或变量名完成,至于是否继承,子类是有继承静态方法和属性,但是跟实例方法和属性不太一样,存在"隐藏"的这种情况。;
2, 多态之所以能够实现依赖于继承、接口和重写、重载(继承和重写最为关键),有了继承和重写就可以实现父类的引用指向不同子类的对象;
3,重写的功能是:"重写"后子类的优先级要高于父类的优先级,但是“隐藏”是没有这个优先级之分的。
4, 静态属性、静态方法和非静态的属性都可以被继承和隐藏而不能被重写,因此不能实现多态,不能实现父类的引用可以指向不同子类的对象。
5,非静态方法可以被继承和重写,因此可以实现多态。
热心网友
时间:2023-07-10 11:50
(1)一个Java类静态方法当然可以由子类继承。比如
class Base
{
public static void someMethod()
{
System.out.println("in static method");
}
}
class Derived extends Base
{}
class Client
{
public static void main(String[] args)
{
Derived.someMethod();
Derived d = new Derived();
d.someMethod();
}
}
运行Client会打印出两行“in static method”,这说明静态方法确实被子类所继承。
“静态方法不能被子类override,因此不支持多态性。”一个Java方法不能被子类override,也不支持多态性,并不奇怪。构造方法就是如此。构造方法是隐含的静态方法.
举一个例子:
class Base
{
public static void someMethod()
{
System.out.println("in static method of Base");
}
}
class Derived extends Base
{
public static void someMethod()
{
System.out.println("in static method of Derived");
}
}
class Client
{
public static void main(String[] args)
{
Derived.someMethod();
Derived d = new Derived();
d.someMethod();
Base o = new Derived();
o.someMethod();
}
}
执行时会打印出
in static method of Derived
in static method of Derived
in static method of Base
显然,到底执行哪一个静态方法,是由变量的明显类型决定的,而不是由对象的真实类型决定。这不是多态性的。
热心网友
时间:2023-07-10 11:50
静态方法不能被继承,只能被调用
热心网友
时间:2023-07-10 11:51
当然能倍继承的了,除了final,以及超出使用范围的方法如:包内权限的方法在包外不能继承。其他的都可以。
热心网友
时间:2023-07-10 11:51
应该是不能吧 你这问题很刁钻啊
方法声明完为static的了
直接就可以通过类名调用了
我是没听过 也没见过 子类继承父类 然后
用子类的类名调用父类的static方法。
java静态方法能被继承吗?原因?
一,java中静态属性和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏.二,原因:1, 静态方法和属性是属于类的,调用的时候直接通过类名;方法名完成对,不需要继承机制即可以调用;(1)如果子类里面定义了静态方法和属性,则这时候父类的静态方法或属性称之为"隐藏";(2)如果你想要调用...
java的静态方法能否被重写或重载
1.在Java中静态方法可以被继承,但是不能被覆盖,即不能重写。2.如果子类中也含有一个返回类型、方法名、参数列表均与之相同的静态方法,那么该子类实际上只是将父类中的该同名方法进行了隐藏,而非重写。3.父类引用指向子类对象时,只会调用父类的静态方法。所以,它们的行为也并不具有多态性。
java,静态方法为什么不能继承?
可以重写静态方法,但重写后的静态方法不支持多态。本质是因为对静态方法在运行期只查找显式声明的类的内存,这就意味着不可能是多态。虚拟机的运行方式就是这样,就是语法规定而已,没什么好解释的,至于什么公共不公共简直是胡扯,说了没说一样 ...
Java static方法会被子类继承吗
父类中的static方法会被子类继承,而且与可以通过父类名.方法名直接调用static方法一样,可以通过子类名.方法名直接调用继承的static方法 示例代码如下:
java中,静态成员函数和静态成员变量可以被继承么?
可以的,做个实验就可以证明了://Test.java class A{ static int i=9;static void print(){System.out.println(i);} } class B extends A{} public class Test{ public static void main(String[] args){ B.print();//这里B的print()就是A里面的 System.out.println(B.i);//这里B....
java中子类可以继承父类的静态变量和静态方法吗
当子类没有重新定义静态属性则子类的静态属性与父类的静态属性为同一个变量 当子类重新定义了父类静态属性则子类的静态属性与父类的静态属性是两个不同的变量 静态方法调用的是定义这个静态方法的类的静态属性。
为什么java里面,静态类也可以有构造函数?
静态类没有说不能被继承,也没有说不能被实例化,是不需要实例化。所谓静态就是程序一启动这个被加静态属性的类,方法,变量都已经被第一时间加载到内存中了!所以你直接调用就可以了!还有别说是静态类的静态方法不用调用,就是普通类的静态方法也是不用实例化的!这样效率更高!
Java的接口interface中为什么不能定义静态方法static?有什么替代手段实 ...
接口不可以实现方法,只可以定义方法,所以不能使用静态方法(因为静态方法必须实现)。要实现静态方法的继承,可以使用抽象类,抽象类中实现静态的方法后,其他类继承。
静态方法能被重写吗
java吗,不可以被重写的,一个指向子类对象的父类引用变量来调用父子同名的静态方法时,只会调用父类的静态方法。这是因为静态方法只能被继承,不能被重写,如果子类有和父类相同的静态方法,那么父类的静态方法将会被隐藏,对于子类不可见,也就是说,子类和父类中相同的静态方法是没有关系的方法,...
java 静态方法可以重载吗重写呢
可以被重载,不可以被重写。静态方法是类在加载时就被加载到内存中的方法,在整个运行过程中保持不变,因而不能重写。但非静态方法是在对象实例化时才单独申请内存空间,为每一个实例分配独立的运行内存,因而可以重写。所谓静态就是在运行时,虚拟机已经认定此方法属于哪个类。 专业术语有严格的含义,...