/**
- 子类可以继承父类中static声明的方法或变量,但不能被重写,不能实现多态
- 变量是无法形成多态的
- 当子类定义的成员变量 与父类中定义的成员变量 具有相同名称时,子类中定义的成员变量会覆盖父类的成员变量,而不会继承
- 当子类的方法与父类的方法 具有相同函数签名(方法名、参数个数与类型),子类将会覆盖父类的方法,而不会继承
*/
public class ex {
public static void main(String[] args) {
Sub sub = new Sub();
System.out.println(sub.str); //子类非静态变量
System.out.println(sub.staticStr); //子类静态变量
sub.staticMethod(); //子类静态方法
sub.method(); //子类非静态方法
System.out.println("==================================");
Father f = new Sub();
System.out.println(f.str); //父类非静态变量 变量是无法形成多态的
System.out.println(f.staticStr); //父类静态变量 变量是无法形成多态的
f.staticMethod(); //父类静态方法
f.method(); //子类非静态方法 子类覆盖父类方法
System.out.println("==================================");
Father f2 = new A();
System.out.println(f2.str); //父类非静态变量
System.out.println(f2.staticStr); //父类静态变量
f2.method(); //父类非静态方法
f2.staticMethod(); //父类静态方法
}
}
class Father {
public String str ="父类非静态变量";
public static String staticStr = "父类静态变量";
public static void staticMethod(){
System.out.println("父类静态方法");
}
public void method(){
System.out.println("父类非静态方法");
}
}
class Sub extends Father{
public String str ="子类非静态变量";
public static String staticStr = "子类静态变量";
public static void staticMethod(){
System.out.println("子类静态方法");
}
public void method(){
System.out.println("子类非静态方法");
}
}
class A extends Father{}
static方法重写(严格意义上并不为重写,这里这是方便解释下面的内容)
在JAVA中,如果父类中含有一个静态方法,且在子类中也含有一个返回类型,方法名,参数列表相同的静态方法,那么该子类实际上是隐藏了父类的同名静态方法,而非重写。
父类和子类中含有的其实是两个没有关系的方法,它们的行为也不具有多态性。
原文链接:https://www.cnblogs.com/whoknows1/p/9981755.html