永久地址:http://justt0.iteye.com/admin/blogs/new
变量:变量只会被隐藏,不能被覆盖,子类的实例变量/静态变量会隐藏父类同名的实例变量/静态变量,注意“/”这个符号,说明总共有4种隐藏方式。
方法:方法有两种方式,被隐藏/覆盖,同名的静态方法被隐藏,同名的实例方法被覆盖,交叉的形式会报错。
父类:
package testjava;
public class Father {
public String name = "father";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
子类:
package testjava;
public class Child extends Father{
public String name = "child";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
测试类:
package testjava;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Child c = new Child();
System.out.println(c.name);
System.out.println(c.getName());
Father f = c;
System.out.println(f.name);
System.out.println(f.getName());
}
}
总结;
1. 可以通过改变父类/子类变量name的类型(实例变量/static变量)测试变量的隐藏效果。
2. 可以通过改变父类/子类getName()方法的类型(如果方法是static的,需要将方法所属类name变量的类型也该为static),然后你就会发现,同名的static方法子类会隐藏父类的方法,而同名的实例方法子类会覆盖父类的方法,交叉形式的重写行为不会被编译器允许。