刚刚发现昨晚提问的问题发错了,run()里面不是super.point(),而是super.run(),代码如下: class A{
    public void point(){
        System.out.println("point A");
    }
    
    public void run(){
        point();
    }
}class B extends A{
    public void point(){        System.out.println("point B");
    }    public void run(){
      super.run();  
      point();
    }
}class C extends B{
    public void point(){
        
        System.out.println("point C");
    }    public void run(){
        super.run();
        point();
    }
}我想实现运行C.run(),能打印出A,B,C,除了在point()里面写super.point(),还有其他办法吗

解决方案 »

  1.   

    不行
    除非你在C.run()中写
    System.out.println("point A");
    System.out.println("point B");
    System.out.println("point C");你的代码中C调用父类(B)而B又调用自己的父类(A)
    所以输出为 
    point A
    point B
    point C
      

  2.   

    一般的方法顶多override了,没有非要父类的同名这么逐级往下调,不像constructor,那是为了对象初始化
    如果你想达到什么效果,那就直接在方法里实现,不要想着从继承上去自动实现
      

  3.   

    要么就用构造方法,这样声明一个类C就可以打印全部的了
    class A
    {
        public  A()
        {
            System.out.println("point A");
        }   
    }class B extends A{
        public B()
        {
            System.out.println("point B");
        }   
    }
    class C extends B
    {
        public C()
        {        
            System.out.println("point C");
        }
    }
    public class Test3 
    {
        public static void main(String[] args)
        {
            C c=new C();
        }
    }
      

  4.   

    不调用父类 怎么会执行到那段代码呢 不想在run里调用那就在所有的paint里加super.paint是一样的:(
      

  5.   


    楼主的代码执行的结果是
    point c 
    point c
    point C啊,也只能是三个c 啊
      

  6.   

    很怪的问题,如果说只为了打印这个东西,直接输出不是更好,而且,对java的线程的感觉,你就算打印的出来,难道就会是,A,B,C这样的循序吗?说不定就是c,b,a了。
      

  7.   

    错了,最近线程搞多了,一看到run()就网线程想了