A类,B类继承A,C类继承B,现在在C类中使用A的保护方法,如何使用?
B,C均重写了A的方法

解决方案 »

  1.   

    class a
    {
    protected void add(){
    System.out.println("hello a");
    }
    }class b extends a
    {
    protected void add(){
    System.out.println("hello b");
    }
    }public class c extends b
    {
    protected void add(){
    System.out.println("hello c");
    }
    public static void main(String [] args){
    a cc = new a();
    cc.add();
    a ccc = new c();
    ccc.add();
    c cccc = new c();
    cccc.add();

      }
    }
      

  2.   

    现在我对main函数中的方法给你讲一下:
    a cc = new a();
    cc.add();         =======创建a的实例,然后调用的是a中的方法,即输出hello aa ccc = new c();
    ccc.add();        =======向上转型,属于动态绑定,由于c是a的子类,并且覆盖了a中的方法
                             所以调用的是子类也就是c中的方法 即输出hello cc cccc = new c();
    cccc.add();       =======创建自己的一个实例,所以很显然调用的是自己的方法,输出hello c
      

  3.   

    class A{

    protected void printString(){
    System.out.println("A");
    }
    }class B extends A{
    protected void printString(){
    System.out.println("B");
    }

    }class C extends B{
    protected void printString(){
    System.out.println("C");
    }

    public static void main(String args[]) throws Exception{
    Class c=null;
    c=Class.forName("C");
    Class b=c.getSuperclass();
        B obj=(B)b.newInstance();
        
        obj.printString();

    }
    }
      

  4.   

    要执行A的函数请参照上面的方法。要是不清楚请看http://sunfruit.blogchina.com/1504853.html
      

  5.   

    protected方法只能在同一个包中调用,要是不在一个包中肯定不能调用了。要不用protected关键字干嘛。
      

  6.   

    protected方法只能在同一个包中调用=====================================只要继承就可以用了啊。当不重载的时候就会自动调用父类(不管几层),一旦重载了几层又不知道该如何跨层使用了????
      

  7.   

    protected方法只能在同一个包中调用要想不在一个包中调用的话只能设置为public。
      

  8.   

    最好B类能提供一个方法,调用A类的保护方法
    class B extends A
    {
       protected void method(){
           ...
       }
       protected void supermethod() {
           super.method();
       }
    }如果改不了B类的话就用楼上所说的反射方法把,只要得到 Method对象,然后调用
    setAccessible(true), 就可以绕过访问权限检查