class A{
void a(){
System.out.println("parent'a()");
}
}class AA extends A{
void a(){
System.out.println("child'a()");
}
}public static void main(String[] agrs){
AA aa = new AA();
aa.a();
A a = (A)aa;
a.a();
}这两种打印出来的结果都是一样的,怎么才能调用A中的a方法,在不改变 A 和AA的方法的情况下。
void a(){
System.out.println("parent'a()");
}
}class AA extends A{
void a(){
System.out.println("child'a()");
}
}public static void main(String[] agrs){
AA aa = new AA();
aa.a();
A a = (A)aa;
a.a();
}这两种打印出来的结果都是一样的,怎么才能调用A中的a方法,在不改变 A 和AA的方法的情况下。
你的这个写法其实就是多态写法,运行的时候,还是AA,因为你重写的父类的方法,想调用父类的方法,你只有直接去new父类A a = new A();
他的类型改变了为什么还是指向的是AA 没有指向A。
A a = new AA();这样写没区别,多态
class AA extends A{
void a(){
System.out.println("child'a()");
}
void sa(){
new A().a();
}
} a.sa();
public:
void print(){
cout<<"Class A"<<endl;
}
};class B: public A{
public:
void print(){
cout<<"Class B"<<endl;
}
};int main(){
B b;
A a = (A)b;
a.print();
A *aa = new B();
aa->print();
cout<<typeid(a).name()<<endl;
system("PAUSE");
return 0;
}
输出的结果是Class A
Class A
1A说明通过类型提升b对象类型已经变成A类型。因此调用A中的行为,自然显现的是A的行为。但是这个在java中确实相反,请看以下代码:class Base{
public String getFields(){
return "Base";
}
}class Agg extends Base{
public String getFields(){
return "AGG";
}
public String getSuperFiedls(){
return super.getFields();
}
}执行该代码
Agg agg = new Agg();
Base base = new Agg();
if(base instanceof Agg)
System.out.println("Class Agg");
else
System.out.println("Class Base");
System.out.println(base.getFields());
System.out.println(agg.getSuperFiedls());结果Class Agg
AGG
Base由此可将,无论将Java中的对象如何进行类型提升,依然保持其原有的类型。今天也是碰到这问题好好总结了一下,希望能够对看到的人有所帮助。
void a(){
super.a();
System.out.println("child'a()");
}
}