执行下边的代码:
class Parent2{ public void Print() { System.out.println("今天是个好日子!!"); } } class Child2 extends Parent2{ public void Print() { //super.Print(); System.out.println("今天不是个好日子!!"); } } public class super1 { public static void main(String[] args) { Child2 a=new Child2(); a.Print(); } }
输出结果为:
原因分析:在子类中重新声明一个与父类同名同参数的函数,会使父类的函数被子类的覆盖,从而不会被输出出来,
若想调用父类的函数,则必须使用Super来调用。比如;若验证以下代码:
class Parent2{ public void Print() { System.out.println("今天是个好日子!!"); } } class Child2 extends Parent2{ public void Print() { super.Print(); System.out.println("今天不是个好日子!!"); } } public class super1 { public static void main(String[] args) { Child2 a=new Child2(); a.Print(); } }
输出结果截图:
如此,运用Super便可以是父类被覆盖的函数显示出来!!!
另外,Java中方法的覆盖还有如下的几条规则:
(1)覆盖方法的允许访问范围不能小于原方法。
(2)覆盖方法所抛出的异常不能比原方法更多。
(3)声明为final方法不允许覆盖。
例如,Object的getClass()方法不能覆盖。
(4)不能覆盖静态方法。