日期:2014-05-20  浏览次数:20734 次

为什么aninal A =new dog();
才开始学java,看到书中的例子:
aninal   A   =new   dog();
为什么不是new   aninal()?,那这样A到底是animal类还是dog类?如果dog没有extend   animal的话。。


------解决方案--------------------
如果dog没有extends/implements animal,就不能这么写

A是animal类。
------解决方案--------------------
aninal A =new dog();
能像这样来声明对象,就说明你的dog类继承了你的父类aninal(这里你的书写不对,类名应该大写!记住哦...^_^)

你可以这样来理解,你父亲给你介绍了个对象(我没说你是动物哈,更没说你是狗,你地明白?)
------解决方案--------------------
这叫做上溯造型,《think in java》中对这个的解释很详细。
------解决方案--------------------
父类引用指向子类对象
------解决方案--------------------
SHOUYU2 ()
aninal A =new dog();

如果单单理解为A是animal类是有问题的,如果这样理解会对理解向上转型和向下转型,多态机制的理解造成障碍
具体的说:A 是 animal类型的引用,但指向的是一个dog()类型的对像,它的可视范围是dog()类型中的animal部分,即向上转型
如果再这样:
Dog d = (Dog)A;
那么d则是 Dog类型的引用,它可以访问A的全部部分(包括Dog独特部分和animal的部分)。
这样是为了多态机制的正常施行

举个例子说:
animal的方法:睡觉,叫
dog的方法:摇尾巴
那么 A只能: (dog)睡觉,(dog)叫,而不能摇尾巴
d则可以:(dog)摇尾巴,(dog)睡觉,(dog)叫

另外:你的单词打错了

------解决方案--------------------
楼上的正解。。。
------解决方案--------------------
关于向上转型和向下转型:

对象类型的方法与对象的关联是通过指针来完成的,比如:
Super sup = new Super();
单从方法而言,在构造结束后,sup对象内部会有一个指向存储在堆中的hi()方法的指针;
sub s1 = new sub();
由于sub类是 Super类 子类,构造s1的过程是:先调用父类的构造方法,构造出父类对象,于是有了指针1,指向Super的hi()方法;然后构造其余部分,指针2,指向sub的bye()方法,子类发现重载hi()重载了,指针1定位到sub()的hi()方法!

子类对象的方法指针分为两类:
一、基类的方法:先指向父类的方法,在构造自己的时候,如果是重载再指向自己的重载方法;
二、自己的新方法:指针在构造自己的时候定位方法;

举例:

class Super{
int a=10;
void hi(){
System.out.println( "你好 ");
}
}
class sub extends Super{
int b=20;
void hi(){
System.out.println( "hi~~~~ ");
}
void bye(){
System.out.print( "sssss ");
}
}
public class Inher10{
public static void main(String[] args){
Super ob1=new sub();
sub ob2=(sub)ob1;
ob2.hi();
ob2.bye();
}
}

向上转型:
Super ob1 = new sub();
ob1在sub()类型对象完成构造后,方法指针都已经正确指定方法,发现自己是个Super对象引用,于是被限定只能使用从基类继承或重载的那部分方法。
sub ob2 = (sub)ob1;
ob1被重新评定为 (sub)对象引用,再把对象地址赋给ob2,ob2指向了原先new出的对象,且它是
sub类型的,所以可以访问子类的新方法了。

------解决方案--------------------
关注
------解决方案--------------------
这个是JAVA 中典型的 多态啊!
父类引用指向子类对象啊!
------解决方案--------------------
父类引用指向子类对象

继承

重写

可以构成多态

文中为父类引用指向子类对象


------解决方案--------------------
子类和父类的关系就是is-a 的关系,父类的对象就可以指向子类。
------解决方案--------------------
造型,多态
------解决方案--------------------
通过你类构造子类对象
uhlanme 和noOnlyCode已经说的很清楚了.
说起来,CSDN这用户显示的A(B)的还真是……
另外:JAVA里是没指针的……