java静态方法和静态属性到底能不能被继承?
程序员文章站
2022-04-01 18:53:40
java中的静态方法或是静态属性能不能被继承先来做一个实验//父类class Father{public static String str = "Father类中的静态属性"; public String s = "Father中的非静态属性";public static void fun(){System.out.println("Father类中的静态方法");}public void f(){System.out.println("Father中的非静...
java中的静态方法或是静态属性能不能被继承
先来做一个实验
//父类
class Father{
public static String str = "Father类中的静态属性";
public String s = "Father中的非静态属性";
public static void fun(){
System.out.println("Father类中的静态方法");
}
public void f(){
System.out.println("Father中的非静态方法");
}
}
class Child1 extends Father
{
public static String str = "Child1改写Father中的静态属性";
public String s = "Child1改写Father中的非静态属性";
public static void fun(){
System.out.println("Child1改写Father中的静态方法");
}
public void f(){
System.out.println("Child1改写Father中的非静态方法");
}
}
//完全继承,不修改
class Child2 extends Father
{
}
//定义测试类
public class TestExtends
{
public static void main(String[] args){
System.out.println("*****************Child2 ch1 = new Child2() 完全继承******************");
//用子类实例化子类
Child2 ch1 = new Child2();
System.out.println(ch1.str);
System.out.println(ch1.s);
ch1.fun();
ch1.f();
System.out.println("*****************Father ch2 = new Child2() 完全继承 多态******************");
//用父类引用指向子类对象
Father ch2 = new Child2();
System.out.println(ch2.str);
System.out.println(ch2.s);
ch2.fun();
ch2.f();
System.out.println("***************Child1 ch3 = new Child1()(Child1中修改了)********************");
Child1 ch3 = new Child1();
System.out.println(ch3.str);
System.out.println(ch3.s);
ch3.fun();
ch3.f();
System.out.println("*****************Father ch4 = new Child1()(Child1中修改了) 多态******************");
//用父类引用指向子类对象
Father ch4 = new Child1();
System.out.println(ch4.str);
System.out.println(ch4.s);
ch4.fun();
ch4.f();
}
}
运行结果为:
结论:java中的静态属性和静态方法是可以被继承的,但是不能被子类重写
原因:
- java中的静态方法、静态属性都属于静态绑定,父类中的静态属性和静态方法是可以继承到子类中的,但是不能被子类重写或者是覆盖。多态是动态绑定…只有动态绑定才会形成多态。静态属性和静态方法只是可以继承并不会表现出出多态性。
- 静态的(即被static修饰的)在编译期就绑定了,而实例化的时候时候,父类引用指向子类对象是运行期才绑定
java不推荐用实例对象去调用静态方法、静态属性。所以个人认为纠结于静态方法能不能被重写意义并不大
本文地址:https://blog.csdn.net/qq_37823003/article/details/107655657
上一篇: mtk默认存储位置到sd卡
推荐阅读
-
java继承时能包括静态的变量和方法吗?举例说明!
-
Typescript 学习3 类的定义、继承 、修饰符、静态属性和方法、接口用途
-
php函数、类和对象以及类的封装、继承、类的静态方法、静态属性,php静态_PHP教程
-
php函数、类和对象以及类的封装、继承、类的静态方法、静态属性,php静态_PHP教程
-
php函数、类和对象以及类的封装、继承、类的静态方法、静态属性,php静态
-
Class的使用和继承,构造方法,实例属性和实例方法,静态属性和静态方法,this和super关键字。
-
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法_javascript技巧
-
java静态方法和静态属性到底能不能被继承?
-
java继承时能包括静态的变量和方法吗?举例说明!
-
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法_javascript技巧