访问父类的父类的方法 | 笔试题

睿思看到的一道有趣的秋招笔试题,转帖一下

public class A {
    protected String getString() {
        return "A";
    }
}

public class B extends A {
    protected String getString() {
        return "B";
    }
}

public class C extends B {
}

要求在C中访问A的getString(),
首先想到super.super发现无法编译
然后想到强转,由于多态机制貌似行不通
又尝试下反射,this.getclass().getSuperClass().getSuperClass().getMethod(…).invoke(…);发现权限是protected


写法1
class A {
    protected String getString() {
        return "A";
    }
}

class B extends A {
    protected String getString() {
        return "B";
    }
}

public class C extends B {
        public static void main (String args[]){
                Class a=C.class.getSuperclass().getSuperclass();               
                try{
                        Object o=a.newInstance();
                        A c=(A)o;
                        System.out.println(c.getString());
                }catch(Exception e){

                }
        }
}
写法2
class A{
    protected String getString() {
        return "A";
    }
}

class B extends A{
    protected String getString() {
        return "B";
    }
}

public class C extends B{

    public static void main(String[] args) {
        Class a = C.class.getSuperclass().getSuperclass();
        try {
            Method m = a.getDeclaredMethod("getString",null);
            System.out.println(m.invoke(a.newInstance(),null));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值