请问各位,结果是怎么的出来的?
谢谢了class A{
public A(){}
public void getClassName(){
System.out.println(super.getClass());
System.out.println(this.getClass());
}
}
class B extends A{
public void getClassName(){
super.getClassName();
System.out.println(super.getClass());
System.out.println(this.getClass());
}
}
public class TestSuper{
public static void main(String[] args){
A a= new B();
a.getClassName();
}
}
谢谢了class A{
public A(){}
public void getClassName(){
System.out.println(super.getClass());
System.out.println(this.getClass());
}
}
class B extends A{
public void getClassName(){
super.getClassName();
System.out.println(super.getClass());
System.out.println(this.getClass());
}
}
public class TestSuper{
public static void main(String[] args){
A a= new B();
a.getClassName();
}
}
解决方案 »
- 有谁用过Java3D,求教个问题.
- 定义并测试一个代表员工的Employee类。员工属性包括“编号”,“姓名”,“基本薪水”,“薪水增长额”,还包括计算薪水增长额以及计算增长后的工资总额的操作方法
- java如何调用dll文件升级程序?
- frame 上加上一个 panel,在 panel 上有个按钮,当按下这个按钮如何获取 frame 的 obj?
- 反射机制的问题 接着问,上个问题可能说的不清楚,强制类型转换
- 表格滚动的问题
- java里面怎么怎么在一个面板里面画一副图像的一部分
- 各位有没有java的教学材料!没办法,要去试讲java的课,不知道该怎么讲。
- 有人知道这是怎么回事吗?高分求教
- 大家随便进来拿分,一个小问题!
- applet的问题,十万火急
- Java的图形界面有没有必要学下去?
通过super可以调用(该对象的)在父类中申明的变量和方法。(有访问控制)
class com.dongyang.face.B
class com.dongyang.face.B
class com.dongyang.face.B答案,不知道为什么
同理,this,和super的真正的类型都 是B类,所以getClass()返回的都是Class B
先自我解释一下,可能不太准确:
getClass是Object的一个方法,它返回的是一个运行时系统中这个类所代表的类名,在这里面就是 a ,不管是它的 super 的这个方法,还是 this 的这个方法,最终都是 对象 a实际代表的类型。那就是b,虽然它声明的时候是A类。
查API文档:
Returns the runtime class of this Object. The returned Class object is the object that is locked by static synchronized methods of the represented class.
在编译期间的类型为A,但真正运行起来后是B,
B中的getClassName方法虽然调用了父类的方法
super.getClass()
但是它返回的是表示该对象的运行时类的 java.lang.Class 对象
而不是返回一个类的名字
这句话解答了我很多困惑