静态方法和属性可以被继承吗?

结论:静态方法和属性可以被继承,但是不能被重写。


我们将结论延伸一下:

我们知道,类的是由成员变量和方法组成的,成员变量代表类的属性,而方法则代表类的行为。

而具体根据静态与否,可以分为

1.静态的成员变量

2.非静态的成员变量

3.静态的方法

4.非静态的方法

下边给出延伸的结论:

上述的四种成员变量和方法,只有非静态的方法可以被继承并且被重写(override)

而另外的三种,静态的成员变量/方法、非静态的成员变量,只能被继承,但是不能被重写,而是被隐藏


在java中多态之所以能实现,主要依赖于继承和重写。有了继承和重写,就可以实现父类的引用指向不同的子类对象。而重写的最主要功能则是:在父类引用,调用子类重写的方法之后,调用的是子类重写的方法,也可以理解为,子类重写的方法优先级高于父类。但是对于隐藏来说,则没有这种优先级的“特权”。


下边我们来通过具体的代码来验证结论

package cn.qiaoh.inheritance;

public class A {
	public static String staticStr = "A静态成员变量";
	public String str = "A非静态成员变量";
	public static void staticMethod() {
		System.out.println("A静态方法");
	}
	public void method(){
		System.out.println("A非静态方法");
	}
}
package cn.qiaoh.inheritance;

public class C extends A {

}
package cn.qiaoh.inheritance;

public class B extends A{
	public static String staticStr = "B静态成员变量";
	public String str = "B非静态成员变量";
	public static void staticMethod() {
		System.out.println("B静态方法");
	}
	public void method(){
		System.out.println("B非静态方法");
	}
}
package cn.qiaoh.inheritance;

import org.junit.Test;

public class StaticInheritance {
	
	@Test
	public void test01() {
		A a = new C();
		System.out.println(a.str);
		System.out.println(a.staticStr);
		a.staticMethod();
		a.method();	
		//输出结果全部为父类A中的成员变量和方法,证明了静态的方法和成员变量可以被继承
	}
	
	@Test
	public void test02() {
		A a = new B();
		System.out.println(a.str);//A的非静态成员变量
		System.out.println(a.staticStr);//A的静态成员变量
		a.method();//B的成员方法
		a.staticMethod();//A的静态成员方法
		
		//只有非静态的方法成功完成了重写,另外三个都是父类的方法和变量
	}
}







  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值