为什么说 类中所有的private方法都隐式的指定为是final的

落叶挽歌 2019-11-04 11:47:04
如何理解 :类中所有的private方法都隐式的指定为是final的 为什么这么说?有理论依据么
...全文
705 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2019-11-05
  • 打赏
  • 举报
回复
这种说法完全没有根据,属于误人子弟
private和final没关系,是两回事
拿属性来说可能更容易理解一些,虽然private不能访问,但通过反射修改访问权限还是可以访问修改的,但加了final,即使可以访问了也修改不了值,这就是区别
自己用反射打印一下结果就知道了,或者用javap反编译看一下伪代码
public class Sample {
static class ATest {
private void test1() {}
private final void test2() {}
}
public static void main(String[] args) {
try {
Class<?> c = Sample.ATest.class;
Method f1 = c.getDeclaredMethod("test1", null);
System.out.printf("%s:%d\n", f1.getName(), f1.getModifiers()); //private修饰
Method f2 = c.getDeclaredMethod("test2", null);
System.out.printf("%s:%d\n", f2.getName(), f2.getModifiers()); //private final修饰
System.out.printf("private:%d\n", Modifier.PRIVATE); //private的修饰值
System.out.printf("final:%d\n", Modifier.FINAL); //final的修饰值
System.out.printf("private & final:%d\n", Modifier.PRIVATE|Modifier.FINAL); //private和final一起的修饰值
} catch (Throwable e) {
e.printStackTrace();
}
}
}
爱吃鱼的ねこ 2019-11-05
  • 打赏
  • 举报
回复
private 方法不能被其他类调用,而final方法不能被覆盖重写,因为重写涉及子类,而子类又无法直接调用父类的private方法,自然就无法重写了,不能重写也就相当于不能修改,那不就是final么
qybao 2019-11-05
  • 打赏
  • 举报
回复
引用 3 楼 落叶挽歌 的回复:
正解,这段话来自《Java编程思想》多态那一章节,的确不太明白作者为什么要这样子去说。

你可以看看英文原版,估计作者翻译过来翻译错了
落叶挽歌 2019-11-05
  • 打赏
  • 举报
回复
正解,这段话来自《Java编程思想》多态那一章节,的确不太明白作者为什么要这样子去说。
引用 2 楼 qybao 的回复:
这种说法完全没有根据,属于误人子弟 private和final没关系,是两回事 拿属性来说可能更容易理解一些,虽然private不能访问,但通过反射修改访问权限还是可以访问修改的,但加了final,即使可以访问了也修改不了值,这就是区别 自己用反射打印一下结果就知道了,或者用javap反编译看一下伪代码
public class Sample {
    static class ATest {
        private void test1() {}
        private final void test2() {}
    }
    public static void main(String[] args) {
        try {
            Class<?> c = Sample.ATest.class;
            Method f1 = c.getDeclaredMethod("test1", null);
            System.out.printf("%s:%d\n", f1.getName(), f1.getModifiers()); //private修饰
            Method f2 = c.getDeclaredMethod("test2", null);
            System.out.printf("%s:%d\n", f2.getName(), f2.getModifiers()); //private final修饰
            System.out.printf("private:%d\n", Modifier.PRIVATE); //private的修饰值
            System.out.printf("final:%d\n", Modifier.FINAL); //final的修饰值
            System.out.printf("private & final:%d\n", Modifier.PRIVATE|Modifier.FINAL); //private和final一起的修饰值
        } catch (Throwable e) {
            e.printStackTrace();
        }
    }
}

51,411

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧