Is there a way to override class variables in Java?

后端 未结 17 1316
没有蜡笔的小新
没有蜡笔的小新 2020-11-22 09:49
class Dad
{
    protected static String me = \"dad\";

    public void printMe()
    {
        System.out.println(me);
    }
}

class Son extends Dad
{
    protected         


        
17条回答
  •  独厮守ぢ
    2020-11-22 10:14

    It indeed prints 'dad', since the field is not overridden but hidden. There are three approaches to make it print 'son':

    Approach 1: override printMe

    class Dad
    {
        protected static String me = "dad";
    
        public void printMe()
        {
            System.out.println(me);
        }
    }
    
    class Son extends Dad
    {
        protected static String me = "son";
    
        @override
        public void printMe()
        {
            System.out.println(me);
        }
    }
    
    public void doIt()
    {
        new Son().printMe();
    }
    

    Approach 2: don't hide the field and initialize it in the constructor

    class Dad
    {
        protected static String me = "dad";
    
        public void printMe()
        {
            System.out.println(me);
        }
    }
    
    class Son extends Dad
    {
        public Son()
        {
            me = "son";
        }
    }
    
    public void doIt()
    {
        new Son().printMe();
    }
    

    Approach 3: use the static value to initialize a field in the constructor

    class Dad
    {
        private static String meInit = "Dad";
    
        protected String me;
    
        public Dad() 
        {
           me = meInit;
        }
    
        public void printMe()
        {
            System.out.println(me);
        }
    }
    
    class Son extends Dad
    {
        private static String meInit = "son";
    
        public Son()
        {
            me = meInit;
        }
    
    }
    
    public void doIt()
    {
        new Son().printMe();
    }
    

提交回复
热议问题