在继承关系中,不管父类还是子类,这些类里面的this都代表了最终new出来的那个类的实例对象,所以在父类中你可以用this获取到子类的信息!
package com.urthinker.module.test;import org.junit.Test;abstract class BaseDao
参考: http://zhidao.baidu.com/link?url=9t24VdT4G63Z7-p6kNHR_WiBFRxRVYMYdmOmREJ_0F-cSDxPsrq0fgyJsq6Bv3uSpsOTH1QPH1YLV5S5cXJhRoRg8KIBHohw2F3DfcA6TK7 给你写了3个类: A类: package cn.test; public class A { public void test(){ System.out.println( this .getClass()); System.out.println( this .getClass().getSimpleName()); System.out.println( this .getClass().getName()); } } B类: package cn.test; public class B extends A{ } Test类: package cn.test; public class Test { /** * @param args */ public static void main(String[] args) { B b = new B(); b.test(); } } 结果: class cn.test.B 不止一层继承关系时,你可以根据下面: A类: package cn.test; public class A { public void test(){ System.out.println( this .getClass()); System.out.println( this .getClass().getSimpleName()); System.out.println( this .getClass().getName()); System.out.println( this .getClass().getSuperclass()); System.out.println( this .getClass().getSuperclass().getSimpleName()); System.out.println( this .getClass().getSuperclass().getName()); } } B类: package cn.test; public class B extends A{ B(){ // System.out.println('B......'); } } C类: package cn.test; public class C extends B{ C(){ // System.out.println('C...........'); } } Test类: package cn.test; public class Test { /** * @param args */ public static void main(String[] args) { C c = new C(); c.test(); } } 结果: class cn.test.C
http://blog.csdn.net/liu_zhen_wei/article/details/6889810 当一个父类的引用指向一个对象的时候,它会调用子类的方法,而不是父类的。 引用在栈内存中存在对象的内存地址。真正的对象(通过 new Student()创建的)存放在堆内存里。 在这块堆内存区域内,存在的是子类的属性(包括自己特有的,以及通过super()构造方法中从父类获得的) 和方法(继承父类但没有覆盖的,以及覆盖父类的方法和自己特有的),尽管引用是声明为父类的引用, 但是它指向的子类的对象,在执行方法的时候,是通过引用指向的堆内存区域内执行的。也就是到底执行父类 方法还是子类方法是由对象决定的,跟引用没有直接关系。 演示代码如下: Person.java
Test.java
I'm a Student object and my name is ^-^ 转自:http://happyqing./blog/2228575 |
|