private声明的方法只能在类内使用,不能在子类和对象中使用

解决方案 »

  1.   

    输出C输出B
    private(私有的)不被继承
      

  2.   

    AD
    One的printA是私有的,不会传给Two
      

  3.   

    编译通不过吧?
    class Two extented One{
      private printA(){输出C}
    //不能覆盖
    }
      

  4.   

    编译通不过,因为方法前没有返回类型:)如果不考虑以上情况,应该是:输出A输出D
    printAB()被继承,printB()被重载
    执行t.printAB()既是执行one的pintA和two的printB()
      

  5.   

    抛开编译通不过这些问题,主要是看它继承这地方我想B是会输出的,就不知道这printA()会怎样?
    t.printAB();
    即会执行ONE的
    protected printAB(){
        printA();
        printB();
    }
    那在这里执行printA()时会怎样呢?ONE中的printA()它应该是不能执行的了
    但Two ()中的printA()它能执行吗?
      

  6.   

    我觉得应该输出C输出D
    首先TWO的对象里面存在printAB方法
    当用TWO的对象调用printAB方法时
    它里面调用的是TWO类的printA和printB方法
    当用ONE的对象调用printAB方法时
    它里面调用的是ONE类的printA和printB方法
      

  7.   

    但是它现在调用的是printAB()方法啊
    printAB方法是属于ONE对象的,那么它是不是就应该执行ONE中的printA和printB啊?(在此ONE 中的printA不能执行)
      

  8.   

    不会,因为printAB方法已经被继承,就是说TWO里面已经有这个方法
    他用TWO的对象调用这个方法,然后方法里面调用printA方法
    就相当于在TWO对象中调用printA方法,所以是TWO对象的printA方法我是这样理解的
      

  9.   

    靠,真是头疼的问题啊Hackevin(小土) withwind(柳随风) 都是对的public class One{
      private void printA(){System.out.println("A");}
      protected void printB(){System.out.println("B");}
      protected void printAB(){
    printA();
    printB();
      }
      public static void main(String[] args){
      Two t=new Two();
      t.printAB();
    }  
    }class Two extends One{
      private void printA(){System.out.println("C");}
      protected void printB(){System.out.println("D");}
      
    }这个是运行的版本,确实是 A D
      

  10.   

    唉~我还打算考scjp呢,看来没戏了
      

  11.   

    分析一下:
    在JAVA里面,运行时调用的方法是依赖于他的实际类型的,如上程序中,
      public static void main(String[] args){
      Two t=new Two();  -->  One t = new Two();
      t.printAB();
    }  
    运行结果也一样。关于改写:
    运行时可最为特殊化的那个版本被执行:所以是AD;
    D是肯定的,A只能够做一些猜测:java虚拟机认为printA方法不能够overwriting 所以直接就调用了,应该和具体虚拟机的实现有关
    另外想要说一点:
    编程序要尽量避免这样的东东,因为编程序不是想要把自己搞迷糊!:)