package com.avicit.zq.test;import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;/**
* Created by admin on 2016/9/18.
*/
public class Main extends A{
public static void main(String[] args) {
Main t = new Main();
t.dot();
}
}
class A {
private Class t = getClass();//referenced to Class Main (1)
protected Log logger = LogFactory.getLog(t);
B b = new B();
public void dot(){
System.out.println(t.getName());
b.dot();
}
}class B{
private Class t = getClass();//referenced to Class B (2)
protected Log logger = LogFactory.getLog(t);
public void dot(){
System.out.println(t.getName());
}
}
//output:
com.avicit.zq.test.Main
com.avicit.zq.test.B有谁能告诉我为啥(1)处的getClass()得到的是父类Main的Class对象,(2)处的getClass()得到的是自身的Class对象?
Object中关于getClass()的解释为:返回运行时类的对象。
坐等高手回答。
extends A
你自己写的输出..
//output:
com.avicit.zq.test.Main
输出不是我自己写的,我只是把运行结果粘贴出来了,我对运行结果有异议。我指的是你的描述有问题.. 什么叫父类Main .. 你不是写的 Main继承A么.
输出不是我自己写的,我只是把运行结果粘贴出来了,我对运行结果有异议。我指的是你的描述有问题.. 什么叫父类Main .. 你不是写的 Main继承A么. 呃呃,犯二了,那把“父类”两个字去掉~
那就更没问题了呀.. 这个对象本来就是Main这个类的呀.. 只是继承了父类的这个方法...
你是想要这两个方法的效果吗..
t.getSuperclass()
t.getGenericSuperclass()
那就更没问题了呀.. 这个对象本来就是Main这个类的呀.. 只是继承了父类的这个方法...
你是想要这两个方法的效果吗..
t.getSuperclass()
t.getGenericSuperclass()我觉得您可能没有明白我的意思,A类和B类同样有一个私有变量,值同样为getClass()[同this.getClass()],为啥getClass()返回的值并不是预期的 A类和B类,而是Main类和B类。
就是我想的返回结果是:
com.avicit.zq.test.A
com.avicit.zq.test.B实际返回结果是:
com.avicit.zq.test.Main
com.avicit.zq.test.B
getClass方法返回对象的类型,而面向对象语言的多态特性决定对象的类型只能在运行期确定(不同于声明的引用类型)
在这里就是用new关键字创建的是Main对象,getClass返回的当然也是Main
那就更没问题了呀.. 这个对象本来就是Main这个类的呀.. 只是继承了父类的这个方法...
你是想要这两个方法的效果吗..
t.getSuperclass()
t.getGenericSuperclass()我觉得您可能没有明白我的意思,A类和B类同样有一个私有变量,值同样为getClass()[同this.getClass()],为啥getClass()返回的值并不是预期的 A类和B类,而是Main类和B类。
就是我想的返回结果是:
com.avicit.zq.test.A
com.avicit.zq.test.B实际返回结果是:
com.avicit.zq.test.Main
com.avicit.zq.test.B
我觉得我已经说清楚了.. 运行时Main对象就是Main的. 如果你 new A()的话 才是A的.
如果要父(超)类的类型的话,就用我给的那两个. 一个是直接父类,另一个是最顶级的父类
如果你把main方法里面的Main t = new Main();改成A t = new A();就会得到你想要的结果。 我是菜鸟,不对勿喷