java的多态问题

来源:百度知道 编辑:UC知道 时间:2024/05/25 10:36:38
public class ploytest {

public static void main(String[] args) {
A a = new A();
B b = new B();
a.s = "[AA]";
b.s = "[BB]";
a = b;
System.out.println(a.s);
System.out.println(b.s);
System.out.println(a.getS());
System.out.println(b.getS());
System.out.println("====================");
((A)b).s = "[AA]";
System.out.println(a.s);
System.out.println(b.s);
System.out.println(a.getS());
System.out.println(b.getS());
}
}

class A {
String s = "[A]";
String getS() {
return s;
}
}

class B extends A{
String s = "";
String getS() {
return s;
}
}

java多态性是对方法而言的,实际应用中应该避免子类成员变量与父类同名,否则容易混淆。
你的代码中对象new A()并没有用处,所以等价于:
A a ;//1.= new A();
B b = new B();
//2.a.s = "[AA]";
b.s = "[BB]";
a = b;//1中new的A,昙花一现,所以2中对其成员更改无任何意义
System.out.println(a.s);
System.out.println(b.s);