Java A b = new B(); B继承A .定义类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 pr
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/19 05:47:54
Java A b = new B(); B继承A .定义类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 pr
Java A b = new B(); B继承A .
定义类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();
则输出的结果如何?
(我知道答案,只是求详解,第二小问的详细解释,初学不懂,求教!)
Java A b = new B(); B继承A .定义类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 pr
A b=new B():
因为B类是A类的子类,所以上面语句发生了向上转型. new B()会在堆内存中产生一个B类的实例,
A b会在栈内存中产生一个A类的引用.
A b = new B()会让b指向堆内存中的new B()实例,但是该实例时B类的实例,这是就会发生向上转型.
如果子类中存在和父类相同名称和参数的方法,这种情况叫做多态性,子类覆写父类方法,
发生向上转型后,调用这种被子类覆写过的方法,那么会直接调用类B的方法show().