java覆盖work方法,Java中的方法的重载与重写(覆盖)

在Java的继承机制中,提供了方法的重载和重写(覆盖),在日常学习和笔试面试时常常容易混淆,因此,下面我们一起讨论下,有不足给我发评论,立即修改。

1.方法的重载

方法的重载必须满足一下条件:

*方法名相同

*方法的参数类型、个数、顺序至少有一项不相同

*方法的返回类型可以不相同

*方法的修饰符可以不相同

2.方法的覆盖(重写)

1.子类的方法的名称、参数类型和返回类型与父类的方法的名称、参数类型和返回类型一致。

2.子类方法不能缩小父类方法的访问权限。

3.子类方法不能抛出比父类方法更多的异常。

4.方法的覆盖(重写)只能存在于子类和父类(包括直接父类和间接父类)之间,在同一个类中方法只能被重载,不能被覆盖(重写)。

5.父类的静态方法不能被子类覆盖(重写)为非静态的方法。

6.子类可以定义与父类静态方法同名的静态方法,以便在子类中隐藏父类的静态方法,在编译时,子类定义的静态方法也必须满足与方法覆盖(重写)类似的约束。

7.父类的静态方法不能被子类覆盖(重写)为非静态方法。

8.父类的私有方法不能被子类覆盖(重写)。

9.父类的抽象方法可以通过两种途径覆盖(重写):一是子类实现父类的抽象方法;二是子类重新声明父类的抽象方法。

10.父类的非抽象方法可以覆盖(重写)为抽象方法。

3.方法覆盖(重写)和方法重载具有以下不同点:

*方法覆盖(重写)要求参数签名必须一致,而方法重载要求参数签名必须不一致

*方法覆盖(重写)要求返回类型必须一致,而方法重载对此不做限制

*方法覆盖(重写)只能用于子类覆盖(重写)父类的方法,方法重载用于同一个类的所有方法(包括从父类中继承而来的方法)。

*方法覆盖(重写)对方法的访问权限和抛出的异常有特殊的要求,而方法重载在这力面没有任何限制。

*父类的一个方法只能被子类覆盖(重写)一次,而一个方法在所在的类中可以被重载多次。

方法的重载的小例子:package Work;

public class Test002 {

public static void main(String[] args) {

System.out.println(add(3));

System.out.println(add(3,4));

System.out.println(add(3.1,4.2));

}

public static int add(int a,int b){

return a+b;

}

//一下为方法的重载分别为参数类型不同,参数个数不同

public static float add(float a,float b){

return a+b;

}

public static double add(double a,double b){

return a+b;

}

public static double add(double a){

return a;

}

}

程序运行的结果为:

4486b6108b88f0de3ad5dd347710c9a5.png

总结:方法的重载都在一个类中,同类中的同名方法都为方法的重载。

方法的重写(覆盖)的小例子:

下面为父类的代码(注意printMessage()方法):

package Work;

public class Father {

private String name ;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public void printMessage(){

System.out.println("我是Father类中的方法!!");

}

}

下面是子类的代码(仅含有从父类继承过来的东西和对pringMessage()方法的重写):package Work;

public class Son extends Father{

public void printMessage(){

System.out.println("我是Son类中的方法!!!");

}

}

下面是我写的一个测试程序:package Work;

public class Text {

public static void main(String[] args) {

Father son = new Son();

son.printMessage();

Father fat = son;//此为Java中的多太

fat.printMessage();

}

}

程序的运行结果又是什么呢????

819ec9781ce7e071953f5c6029672b63.png

怎么能够然程序执行父类的printMessage()方法呢????

程序代码:package Work;

public class Text {

public static void main(String[] args) {

Father son = new Son();

son.printMessage();

Father fat = son;//此为Java中的多太

fat.printMessage();

fat = new Father();

fat.printMessage();

}

}

程序的运行结果:

ff0b5fdcef1e11eb1da36cd11a31363a.png

总结:在父子类之间的同名方法,一般都为方法的重写(覆盖),如果方法的参数类型、个数和顺序都相同则一定是方法的重写(覆盖)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值