关于Java方法重写的问题

请问这个输出的为什么是private f() 而不是public f()

img

因为你是以基类类型调用的方法
要想调用public f,那么2个改法
强制类型转换成派生类后再调用
将基类的f定义成virtual的,派生类加上@override

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/374732
  • 除此之外, 这篇博客: Java中不能实现多态的方法中的 private修饰的方法 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    public class VerifyPolymorphism {
        public static void main(String[] args) {
            Father son = new Son();
           
            //验证父类私有方法是否被覆盖
            son.getPrivateMethod();
          
            Son son1 = new Son();
            son1.privateMethod();
        }
    }
    
    class Father{
       
        private void privateMethod(){
    
        }
    
        public void getPrivateMethod() {
            System.out.println("Father privateMethod.");
        }
    }
    class Son extends Father{
       
        public void privateMethod(){
            System.out.println("Son privateMethod.");
        }
    }

    运行结果:

    Father privateMethod.
    Son privateMethod.

    通过运行结果,我们发现,父类私有方法也是不能够覆写的,也不能实现多态。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^