当前位置: 代码迷 >> 综合 >> 方法的多态性:Overloding && Overriding
  详细解决方案

方法的多态性:Overloding && Overriding

热度:92   发布时间:2024-01-26 22:49:54.0

学习Java语言的基础性知识时,一直搞不懂方法重载(Overloading)和方法覆写(Override)的差别,有幸重新温习了一遍,记录一下。
面向对象的多态性主要分为两种:方法的多态性以及对象的多态性。

而其中方法的多态性又可以划分为:重载和覆写

No 区别 重载(Overloding) 覆写(Overriding)
1 定义 方法名称相同,参数类型及个数不同

方法名称,参数类型及个数,返回值类型完全相同

2 权限 没有权限要求 被子类所覆写的方法不能拥有比父类更严格的访问控制权限
3 范围 发生在同一个类中 发生在继承关系类中
方法重载时可以改变返回值类型,一般设计的时候不会这样去做,即方法的返回值类型参数尽量统一。构造方法Constructor不能被继承,因此不能被覆写(Overriding),但是可以被重载(Overloading)

方法重载实例:

package four;public class JavaDemo {public static void main(String[] args) {int resultA = sum(10,20);int resultB = sum(10,20,30);int resultC = sum(11.3,25.3);System.out.println(resultA);System.out.println(resultB);System.out.println(resultC);}public static int sum(int a, int b) {return a + b;}public static int sum(double a , double b) {return (int)(a + b);}public static int sum(int a, int b, int c) {return a + b + c;}
}

方法覆写实例:

package four;
/**父类:Person
**/
public class Person {private String name;private int age;Person(){}Person(String name, int age){this.name = name;this.age = age;}public void work() {System.out.println("人要工作");}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}package four;
/**子类:Theacher
**/public class Teacher extends Person{private String school;Teacher(String name, int age, String school){super(name , age);this.setSchool(school);}@Overridepublic void work() {System.out.println("老师的工作是教书");}public String getSchool() {return school;}public void setSchool(String school) {this.school = school;}}
package four;
/**测试类
**/
public class TestDemo {public static void main(String[] args) {Person p = new Person("huhu",29);p.work();Teacher t = new Teacher("Gao",29,"SCAU");t.work();}
}