java基础知识 | 方法继承、覆盖

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第16天,点击查看活动详情

方法继承、覆盖和加载

方法继承

一般情况下子类可以继承父类定义的一些方法。如果子类中存在名字和父类相同的方法,在子类中调用这些方法之前要加上super。另外,若子类中不存在名字与之相同的方法,则在子类中直接调用父类的方法即可--就是不需要使用super。 - 代码示例:

```java //在父类定义了三个方法 public class FatherClass{

public void fun1(){ System.out.println("我是父类方法1"); } } public void fun2(){ System.out.println("我是父类方法2"); } } public void fun3(){ System.out.println("我是父类方法3"); } } 定义子类SonClass并继承FatherClass java //继承了func1()、func2(),重新定义了func3()、func4()、func5(). public class SonClass extends Fathers{ public void func2(){ super.func2(); System.out.print("子类,func2()"); } public void fun4(){ super.func1(); func2(); System.out.println("子类,func4()"); } public void func5(){ System.out.println("子类:func5()"); }

} ```

方法覆盖

如果子类中定义了一个方法,其名称、返回类型及参数列表正好与父类中某个方法的名称、返回类型及参数列表相匹配,那么可以说,子类的方法覆盖了父类的方法。

子类覆盖父类方法的条件

  • 子类的方法名称、返回类型以及参数列表必须一致
  • 子类方法不能缩小父类方法的访问权限
  • 子类方法不能抛出比父类方法更多的异常
  • 方法覆盖只存在于子类和父类之间,同一个类只能重载。
  • Java静态虚拟机把静态方法和所属的类的绑定,把实例方法和所属的实例绑定
  • 父类的静态方法不能被子类覆盖成为非静态方法
  • 子类可以定义与父类的静态方法同名的静态方法,以便在子类中隐藏父类的静态方法
  • 父类的私有方法不能子类覆盖
  • 父类的抽象方法可以被子类通过两种途径覆盖
  • 父类的非抽象方法可以被覆盖为抽象方法

注: 当子类覆盖了父类方法时,如果子类方法或者子类对象调用该方法时,一般认为调用的方法是子类的方法。而如果要调用父类的同名方法,则在子类中需要加上super。 ```java public class PaClass{ //定义三个方法 public void funcA(){ System.out.println("父类:A运行"); } public void funcB(){ System.out.println("父类:B运行"); funcA();//调用A方法 System.out.println("父类:B结束"); } public void funcC(){ System.out.println("父类:C运行"); System.out.println("父类:C结束"); } } //SuClass类 public void SuClass extends PaClass{ public void funcA(){ System.out.println("子类:A运行"); System.out.println("子类:A结束"); } public void funcB(){ System.out.println("子类:B运行"); super.funcB();//调用父类的funcB()方法 System.out.println("子类:B结束"); }

public void funcC(){ System.out.println("子类:C运行"); funcA(); //调用子类的方法 System.out.println("子类,C结束")

} } ``` 在SuClass类中,定义了funcA()\funcB()\funcC()方法,覆盖了父类定义的三个方法。在SuClass类中的funcB()方法中,通过super修饰符调用了父类的funcB方法。再funC方法中未使用super,因此是调用它本身类的funcA方法。

猜你喜欢

转载自blog.csdn.net/y943711797/article/details/132972184