class A
{
void jj(B b)
{
System.out.println("success");
}
public static void main(String args[])
{
A a=new A();
B b=new B();
a.jj(a);//向下转型.失败!,我想问一下,为什么向上转型会成功?而向下转型不成功.请各位说一下其中的原理,谢谢了.
}
}
class B extends A
{}
{
void jj(B b)
{
System.out.println("success");
}
public static void main(String args[])
{
A a=new A();
B b=new B();
a.jj(a);//向下转型.失败!,我想问一下,为什么向上转型会成功?而向下转型不成功.请各位说一下其中的原理,谢谢了.
}
}
class B extends A
{}
{
String name="张三";
void jj(B b)
{
System.out.println("success");
}
public static void main(String args[])
{
A x=new B();
System.out.println(x.getClass().getName()); //返回B
System.out.println(x.age);//不明白,既然x为B类的实例变量,B类中又有成员变量age.些时为什么会出错呢?
System.out.println(x.name);
}
}
class B extends A
{
int age=20;
}
A为B的父类,不可以这么直接用的,
即使在这里a.jj(a);//
强制进行转换a.jj(B(a))也不行
打个比方说,动物类是哺乳动物类的父类,
你不可以说动物都是哺乳动物,所以不可以把一个动物强制转换成哺乳动物,
除非你一开始就知道它是哺乳动物
好像是因为x是虽然是B类的实例,但它使用的是A类的引用
(同时也希望路过的朋友能指点一下:)class A
{
String name="张三";
void jj(B b)
{
System.out.println("success");
}
public static void main(String args[])
{
A x=new B();
System.out.println(x.getClass().getName()); //返回B
System.out.println(x.age);//不明白,既然x为B类的实例变量,B类中又有成员变量age.些时为什么会出错呢?
System.out.println(x.name);
}
}
class B extends A
{
int age=20;
}
把main方法调到B里,难道就是不是先有A了吗?
{
void jj(B b)
{
System.out.println("success");
}
public static void main(String args[])
{
A a=new A();
B b=new B();
a.jj(a);//向下转型.失败!,我想问一下,为什么向上转型会成功?而向下转型不成功.请各位说一下其中的原理,谢谢了.
}
}
class B extends A
{}胡说二句:我认为向上和向下转型,主要是对方法而言,参数并不能。不知道胡说得对不。
a.jj(a); 改为 a.jj(b)就可以。