public class A{...............}public class B extends A{..................public void test{
    System.out.println(getClass().getName());
    System.out.println(super.getClass().getName());}
}第二个输出语句为什么也输出的是子类的类名?
麻烦高手给解决一下,谢谢

解决方案 »

  1.   


    package csdn.javase.inherit.ex1;class ClassA {}
    package csdn.javase.inherit.ex1;
    /**
     * 
     * @author supercodingman
     * @version 1.0
     *
     */
    public class ClassB extends ClassA{

    public static void main(String[] args){
    ClassB b = new ClassB();
    b.showA(b);
    }
    public void showA(ClassB b){
    System.out.println(b.getClass().getName());
    System.out.println(b.getClass().getSuperclass().getName());
    }
    }/**output
    csdn.javase.inherit.ex1.ClassB
    csdn.javase.inherit.ex1.ClassA
    */
      

  2.   

    请问其中的package是做什么用的?不写可以吗?
      

  3.   

    输出一样的效果是对的。
    分析如下:java所有的类都继续Object类,所以在没有重写getClass()方法的情况下,我们调用getClass()方法都是调用了Object的getClass()方法,你这里就是属于这一种情况;所以不管是"getClass().getName();"还是"spuer.getClass().getName();"都是调用了Object的getClass().getName();所以打印的结果一样。
      

  4.   


    class A
    {
      public A()
     {
      System.out.println(getClass().getName()); 
     }
    }public class B extends A
    {
      public B( )
     {
      System.out.println(getClass().getName()); 
     }
      public static void main(String args[])
     {
      new A();
      new B();
     }
    }运行结果:
    A
    B
    B第一个A是“new A(); ”的结果
    两个B是“new B();"的结果(先调用A类的构造函数,在调用B类的构造函数)结合API文档:getClass()的作用是 “返回此 Object 的运行时类” 这样,结果可得到合理的解释。
      

  5.   

    另外,提出一个错误的地方:
    一个Java程序里有两个public的类显然是不对的,编译都通不过
      

  6.   

    这里是指你自己代码所在的包,和你的java文件所在的路径相对应的,自己另外定义。包内有一组类,他们在单一的名字空间之下,由于共同的目的被组织在了一起。可以把它想象成一台车(包),里面放了很多组成这台独一无二的车的零件(类),而这些所有类里面有一个驾驶员可以操控的引擎(public类),这样你的车就能跑起来。
      

  7.   

    你没有理解super,super和new A()全不同的。
    super的意思是引用父类的方法或数据。
    super.getClass()并不是new A().getClass()
    而是B调用A的getClass()方法,这个方法A和B都是继承自Object的,且不能覆写。
    所以当然结果是B而不是A。
      

  8.   

    向上转型,建议你看看《thinking in java》这本书很经典