Java这个和超级关键字

时间:2014-04-25 12:56:52

标签: java this super

我有一个关于Java和超级关键字的问题,让我们来看一些例子

第一个例子

import java.awt.*;

public class Main extends Frame {
        //constructor of the class 
        public Main () {
                super ("My frame");
                setSize (200,100);
                setVisible (true);
        }

        public static void main (String [] args) {
                 new Main ();
         }
}

第二个例子

import java.awt.*;

public class Main extends Frame {
        //constructor of the class 
        public Main () {
                //here the difference from example 1    
                super ("My frame");
                super.setSize (200,100);
                super.setVisible (true);
        }

        public static void main (String [] args) {
                 new Main ();
         }
}

哪个例子更好,为什么?

现在让我们举一些关于这个关键字的例子

public class Main {
        public void print () {
                System.out.println ("Hi");
        }

        public static void main (String [] args) {
                 print();
         }
}

第二个例子

public class Main {

        public void print () {
                System.out.println ("Hi");
        }

        public static void main (String [] args) {
                 //here the difference
                 this.print();
         }
}

哪个更好,为什么? 谢谢你的回答

1 个答案:

答案 0 :(得分:2)

仅在您确实需要时才使用super。如果您覆盖setSize(),那么您会发现第二个示例不会调用您重写的方法。这不一定是期望的行为,因此您通常应该在没有super前缀运算符的情况下调用方法。通常最好编写代码,使其可以扩展或维护,而不必担心某些覆盖是否会实际覆盖某些方法。另请参阅Vulcan的评论,使问题无效。