我们都知道,Java在子类与父类有同名的方法签名时,会发生重写,调用时会具体调用到子类的方法:
public class Test{
public static void main(string[] args){
Aoo o1 = new Boo();
o1.show();
}
}
class Aoo{
void show(){
System.out.println("这是Aoo中的show方法");
}
}
class Boo{
void show(){
System.out.println("这是Boo中的show方法");
}
}
//输出:"这是Boo中的show方法"
如以上这段,当发生向上造型时,引用去调用父类跟子类都有的方法,最后会执行子类的方法。
那么,如果子类跟父类如果有同名变量会发生什么样的情况,而这两个变量的访问权限不同又会如何处理?
在编译器中执行下面这段代码:
public class Test{
public static void main(string[] args){
Aoo o1 = new Boo();
System.out.println(o1.name);
o1.show();
}
}
class Aoo{
String name = "aoo";
void show(){
System.out.println("name:"+name);
}
}
class Boo{
String name = "boo";
void show(){
System.out.println("name:"+name);
}
}
那么会有如下输出:
// aoo
// name:boo
也就是说,并没有发生覆盖的情况那么我们就知道了java的这个知识点:
如果子类有与父类相同的成员变量,那么不会发生类似重写的情况,子类会拥有两个同名的成员变量