多态:
Percent p = new Children();
对于成员方法:编译看左边,运行看右边。
对于成员变量:编译运行都看左边。也就是成员变量没有多态特性。
静态方法和变量:编译运行都看左边,同成员变量一样。
子类的同名的 类变量
、静态方法
、静态变量
不会覆盖父类。 调用p的这些属性找的是父类的属性
子类同名的类方法
覆盖父类。 调用p的方法找的是子类的方法。
调用p的属性(变量或方法)会检查父类Percent是否存在此属性,如果不存在(只有子类有)或者父类属性用private修饰则编译不通过。
public class Percent {
//成员变量
public String str="percent:str 成员变量";
private String str2="percent:str2 成员变量";
//静态变量
public static String strStatic="percent:strStatic 静态变量";
//成员方法
public void fun() {
System.out.println("percent 成员方法");
}
//静态方法
public static void funStatic(){
System.out.println("percent 静态方法");
}
}
public class Child extends Percent {
//成员变量
public String childStr="child:childStr 成员变量";
public String str="child:str 成员变量";
public String str2="child:str2 成员变量";
//静态变量
public static String childStrStatic="child:childStrStatic 静态变量";
public static String strStatic="child:percentStrStatic 静态变量";
//成员方法
public void fun() {
System.out.println("child 成员方法");
}
//与父类重名的静态方法
public static void funStatic(){
System.out.println("child 静态方法");
}
}
public static void main(String[] args) {
Percent p=new Child();
System.out.println(p.str); //输出:percent:str 成员变量
System.out.println(p.strStatic); //输出:percent:strStatic 静态变量
// System.out.println(p.childStr); 报错,父类不存在childStr
// System.out.println(p.str2); 报错,父类str2变量是private修饰
p.fun(); //输出:child 成员方法
p.funStatic(); //输出:percent 静态方法
}