JAVA静态方法和属性是否可以被继承?

博文转自:https://www.cnblogs.com/mxmbk/articles/5151095.html

java中静态属性和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏.  

1). 静态方法和属性是属于类的,调用的时候直接通过类名.方法名完成对,不需要继承机制即可以调用。

 2). 静态属性、静态方法和非静态的属性都可以被继承和隐藏而不能被重写,因此不能实现多态,不能实现父类的引用可以指向不同子类的对象。

3). 如果在子类重写静态方法加上@Override会直接编译报错,不加@Override重写,用谁的对象/类调用就执行方法,静态方法时属于类的;静态属性同上

/**
 * 父类
 */
public class A {

	public static String staticStr = "A静态属性";
	public String nonStaticStr = "A非静态属性";

	public static void staticMethod() {
		System.out.println("A静态方法");
	}

	public void nonStaticMethod() {
		System.out.println("A非静态方法");
	}

}
/**
 * 子类,重写父类的静态属性和静态方法
 */
public class B extends A {

	public static String staticStr = "B改写后的静态属性";
	public String nonStaticStr = "B改写后的非静态属性";

	public static void staticMethod() {
		System.out.println("B改写后的静态方法");
	}

}

/**
 * 子类,直接继承
 */
public class C extends A{

}

/**
 * 测试类
 */
public class Test {

	public static void main(String[] args) {
		C c = new C();
		System.out.println(c.nonStaticStr);
		System.out.println(c.staticStr);
		c.staticMethod();// 输出的结果都是父类中的非静态属性、静态属性和静态方法,推出静态属性和静态方法可以被继承
		System.out.println("-------------------------------");

		A c1 = new C();
		System.out.println(c1.nonStaticStr);
		System.out.println(c1.staticStr);
		c1.staticMethod();// 结果同上,输出的结果都是父类中的非静态属性、静态属性和静态方法,推出静态属性和静态方法可以被继承

		System.out.println("-------------------------------");
		B b = new B();
		System.out.println(b.nonStaticStr);
		System.out.println(b.staticStr);
		b.staticMethod();

		System.out.println("-------------------------------");
		A b1 = new B();
		System.out.println(b1.nonStaticStr);
		System.out.println(b1.staticStr);
		b1.staticMethod();// 结果都是父类的静态方法,说明静态方法不可以被重写,不能实现多态
	}
/*	
 	A非静态属性
	A静态属性
	A静态方法
	-------------------------------
	A非静态属性
	A静态属性
	A静态方法
	-------------------------------
	B改写后的非静态属性
	B改写后的静态属性
	B改写后的静态方法
	-------------------------------
	A非静态属性
	A静态属性
	A静态方法
*/
}


猜你喜欢

转载自blog.csdn.net/qq_31024823/article/details/79886154