Java A b = new B(); B继承A 。

定义类A和类B如下:classA{inta=1;doubled=2.0;voidshow(){System.out.println("ClassA:a="+a+"\td=... 定义类A 和类B 如下:

class A {

int a=1;

double d=2.0;

void show(){

System.out.println("Class A: a="+a +"\td="+d);

}

}

class B extends A{

float a=3.0f;

String d="Java program.";

void show(){

super.show( );

System.out.println("Class B: a="+a +"\td="+d);

}

}

(1) 若在应用程序的main 方法中有以下语句:

A a=new A();

a.show();

则输出的结果如何?

(2) 若在应用程序的main 方法中定义类B 的对象b :

A b=new B();

b.show();

则输出的结果如何?

(我知道答案,只是求详解,第二小问的详细解释,初学不懂,求教!)
展开
 我来答
windzxa
2012-07-14 · TA获得超过150个赞
知道答主
回答量:119
采纳率:0%
帮助的人:75万
展开全部
A b=new B():
因为B类是A类的子类,所以上面语句发生了向上转型. new B()会在堆内存中产生一个B类的实例,
A b会在栈内存中产生一个A类的引用.
A b = new B()会让b指向堆内存中的new B()实例,但是该实例时B类的实例,这是就会发生向上转型.
如果子类中存在和父类相同名称和参数的方法,这种情况叫做多态性,子类覆写父类方法,
发生向上转型后,调用这种被子类覆写过的方法,那么会直接调用类B的方法show().
更多追问追答
追问
什么是向上转型?
我第二问原本是觉得结果应该是这样的:
Class A: a=3 d=Java program.
Class B: a=3 d=Java program.
我就是不懂,为什么A b = new B();
会是A的成员变量,而不是B的成员变量
追答
向上转型是java多态的知识,所谓向上转型,就是让父类引用变量指向子类实例.
正常情况下是:栈内存中的子类引用变量指向堆内存中的子类实例,
本质来说:java对象类型有编译时类型和运行时类型,编译时类型是定义时指定的类型,运行时类型是申请空间之后实际赋予的类型,当编译时类型与运行时类型不同时就叫做多态.
比如此题.A b=new B()它的编译时类型是A类,运行时类型是B类,所以这就发生了多态,
其中将子类实例赋给父类引用叫向上转型.
将子类实例赋给父类引用,再将该父类引用赋给另一个子类引用,这叫做向下转型.
QQMSD8
推荐于2018-03-14 · 知道合伙人软件行家
QQMSD8
知道合伙人软件行家
采纳数:6788 获赞数:13239
没有做不到,只有想不到,帮助别人的同时也是对自己的提升

向TA提问 私信TA
展开全部
A b=new B(); 这就是java的多太性了, 父类定义一个变量, 实例却是子类.
也就是说, A b 这个变量实例对象其实是 B , 由于B 类方法中又调用 super.show 因为会先调用A类的 show
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
303767416
2012-07-14 · TA获得超过526个赞
知道小有建树答主
回答量:283
采纳率:66%
帮助的人:96万
展开全部
粗浅回答,希望能为你解惑
public class TB {

public static void main(String args[]){
//(1)
A a=new A();
a.show(); //这里的show相当于从对象a中调用了A中show()的方法
//(2)
A b=new B(); //这里无非是上转型
b.show();
}
}
class A{
int a=1;
double d=2.0;
void show(){
System.out.println("Class A: a="+a +"\td="+d);
}
}
class B extends A{
float a=3.0f;
String d="Java program.";
void show(){
super.show( ); //先super,调用了父类中的输入方法 ,也就是输出了 Class A: a=1 d=2.0
System.out.println("Class B: a="+a +"\td="+d);
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
飘客521
2012-07-14
知道答主
回答量:8
采纳率:0%
帮助的人:8.2万
展开全部
这是一个继承的问题,当子类对象中有调用的方法时,就不会去父类中找方法,这是优先级的问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bvv874531284
2012-07-14
知道答主
回答量:12
采纳率:0%
帮助的人:1.9万
展开全部
a
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式