JAVA中继承时方法的重载(overload)与重写/覆写(override)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA中继承时方法的重载(overload)与重写/覆写(override)相关的知识,希望对你有一定的参考价值。

JAVA继承时方法的重载(overload)与重写/覆写(override)

 

重载-Override

函数的方法参数个数类型不一致,称为方法的重载。

从含义上说,只要求参数的个数或参数的类型不一致就说两个函数是重载函数,而至于返回值是否一样,没关系。同时,重载可以发生在同一个类中也可以发生在继承关系中。

class A

{

 

}

 

class B extends A

{

public void fun(String data1)

{

System.out.println(data1);

}

 

 

public String fun(String data1,String data2)

{

System.out.println(data1 + "-->" + data2);

return "";

}

}

上面的代码说明了在同一个类中的方法重载。此外,如果我们把第一个函数移到A类中,也构成了重载关系。

class A

{

public void fun(String data1)

{

System.out.println(data1);

}

}

 

class B extends A

{  

public String fun(String data1,String data2)

{

System.out.println(data1 + "-->" + data2);

return "";

}

}

 

重写-Override

重写也被称为覆写。对一个方法的重写必须发生在具有继承关系的两个类中,即子类对父类方法的重写。它要求两个方法的参数个数类型以及返回值类型都必须一致,这样才称为方法重写。

class A

{

public void fun(String data)

{

System.out.println(data);

}

}

 

class B extends A

{  

public void fun(String data)

{

System.out.println("XXXX" + data);

}

}

上面代码演示了子类对父类方法的覆写。可以看到两个函数的参数个数和类型以及返回值都是一致的。

同时子类对父类的方法覆写对权限有要求,子类方法的访问权限必须大于或等于父类方法的访问权限。也就是说如果父类方法的访问权限是default,那么子类必须是default或者public,如果父类方法是public访问权限,那么子类就只能是public访问权限了。然而,实际开发中,绝大多数的方法都是public访问权限,所以覆写方法也是public

关于访问权限,还有一点需要注意的是,父类方法如果是private,根据JAVA的封装性原则,private是不让其它任何类访问的。那么,此时子类能否对父类的private方法进行覆写呢?

答案是否定的。

class A

{

public void test()

{

fun();

}

private void fun()

{

System.out.println("父类的private fun()");

}

}

 

class B extends A

{  

public void fun()

{

System.out.println("子类的public fun()");

}

}

 

public class Hello

{

public static void main(String[] args)  throws Exception

{

B b =  new B();

b.test();

}

}

 

此时运行结果是调用的父类的private fun()方法。

所以,此时对重载和覆写做一个总结:

比较项目

重载

覆写/重写

英文名

Overload

Override

函数签名

只要求函数的参数个数或类型不一致,对返回值没要求

函数的参数个数、类型、返回值都必须完全一样。

发生地方

同一个类或者具有继承关系的两个类中

只能发生在继承关系的两个类中

访问权限

没有限制

子类覆写方法的访问权限必须大于或等于父类的方法的访问权限

以上是关于JAVA中继承时方法的重载(overload)与重写/覆写(override)的主要内容,如果未能解决你的问题,请参考以下文章

Java面向对象编程之继承

Java之重载与覆盖

Java 方法重载 (Overload)

Java基础---Java方法的重载Overload

java语言中,overload(重载)和override(覆盖)有何区别?

Java中的Overload(重载)与Override(重写覆盖)