执行下边的代码:

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方法不允许覆盖。

例如,ObjectgetClass()方法不能覆盖。

4)不能覆盖静态方法。