栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java反射获取父类的默认属性

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java反射获取父类的默认属性

除了私有属性不可访问,默认、protected、public都可以访问。

如下图,priName是父类的私有属性,子类对象s就不能访问priName,但是可以访问默认属性name。

在HashMap中,Node的内部属性都是默认的。HashMap和linkedHashMap又在同一个包java.util.*下面,所以linkedHashMap.Entry可以访问到HashMap.Node。

linkedHashMap.Entry继承自HashMap.Node,其内部属性都是默认的。

HashMap.TreeNode继承自linkedHashMap.Entry,内部属性也是默认的。

所以TreeNode理论上应该能够访问到父类所有的属性。HashMap.Node不是public,所以程序员不能直接获取HashMpa.Node对象。问题不大用反射看看所有的可访问的默认属性:

    public static void main(String[] args) {
        try {
            Class cls = Class.forName("java.util.HashMap$TreeNode");
            while (!Object.class.equals(cls)) {
                System.out.println(cls.getSimpleName()+": ");
                Field[] temp = cls.getDeclaredFields();
                for (Field f : temp) {
                    String modifier = Modifier.toString(f.getModifiers());
                    if (!modifier.contains("private")&&!modifier.contains("protected")&&!modifier.contains("public")) {
                        if (!f.getName().startsWith("$")) { //过滤掉 $assertionsDisabled
                            System.out.print(f.getName() + " ");
                        }
                    }
                }
                System.out.println();
                cls = cls.getSuperclass();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
	}

运行结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/489939.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号