重载——同样的一个方法能够根据输入数据的不同,做出不同的处理。【有不同的参数列表(静态多态性)】
(1) 方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。
重载Overloading是一个类中多态性的一种表现。
(2) Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。
调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。
(3) 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。
重写——当子类继承自父类的相同方法,输入数据一样,但要做出有别于父类的响应时,就需要重写父类的方法。即在子类中重写该方法【相同参数,不同实现(动态多态性)】
(1) 父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是 想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。
(2)若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。如需父类中原有的方法,可使用 super关键字,该关键字引用了当前类的父类。
用个toy program应该更好理解一些,看完程序之后建议读者应该先想一想输出结果是什么。
1. Overload:比较不同类型的两个数的大小,把大的那个数输出。
[java] view plain copy
1. public class TestOverload{
2. void max(int a,int b){
3. System.out.println(a>b ? a : b);
4. }
5.
6. //构成重载,名称一样,参数(个数或类型)不一样的多个方法
7. void max(short a, short b){
8. System.out.println(a > b ? a : b);
9. }
10.
11. void max (float a, float b){
12. System.out.println(a> b ? a : b);
13. }
14.
15. public static void main(String[] args){
16. new Test();
17. //调用的是int类型的参数方法
18. 2, 5);
19.
20. //调用的是short类型的参数方法
21. short a=2;
22. short b = 4;
23. t.max(a,b);
24. }
25. }
输出结果:
t.max(2,5)调用的是void max(int a,int b),再比较这个两个值的大小,结果输出是5;t.max(a,b),传入的是虽然是2和4,但强制转换成short类型,所以调用的是void max(short a, short b),结果输出是4。
2.Override:获取人和学生的相关信息。
[java] view plain copy
1. //获取人和学生的相关信息
2. class Person{
3. private String name;
4. private int age;
5. public void setName(String name){this.name=name;}
6. public void setAge(int age){this.age=age;}
7. public String getName(){return name;}
8. public int getAge(){return age;}
9. public String getInfo(){ //父类只有name合age属性
10. return "Name: " + name + "\n" + "age: " +age;
11. }
12. }
13. class Student extends Person{
14. private String school; //除了有父类的name和age外,还有自己的的school属性
15. public String getSchool(){ return school;}
16. public void setSchool(String school){ this.school=school;}
17. //重写了父类的方法,把自己特有的school属性也实现
18. public String getInfo(){
19. return "Name: " + getName() + "\n" + "age: " +getAge() + "\nschool: " +school;
20. }
21. }
22.
23. public class TestOverWrite{
24. public static void main(String arg[]){
25. new Student();
26. new Person();
27. "lee");
28. 24);
29. "Angelo");
30. 18);
31. "北理工");
32. person.getInfo();
33. student.getInfo();
34. //person的信息,父类
35. //student的信息,子类
36. }
37. }
输出结果: