Java之重载和重写

来源:互联网 发布:软件著作权是什么意思 编辑:程序博客网 时间:2024/04/29 03:40


       重载(Overload)与重写(Overwrite/Override)都是针对方法来说的,那这两种机制有什么好处呢?

      重载——同样的一个方法能够根据输入数据的不同,做出不同的处理。【有不同的参数列表(静态多态性)】

重写——当子类继承自父类的相同方法,输入数据一样,但要做出有别于父类的响应时,就需要重写父类的方法。即在子类中重写该方法【相同参数,不同实现(动态多态性)】

用个toy program应该更好理解一些,看完程序之后建议读者应该先想一想输出结果是什么。

1. Overload:比较不同类型的两个数的大小,把大的那个数输出。

public class TestOverload{void max(int a,int b){System.out.println(a>b ? a : b);}//构成重载,名称一样,参数(个数或类型)不一样的多个方法void max(short a, short b){System.out.println(a > b ? a : b);}void max (float a, float b){System.out.println(a> b ? a : b);}public static void main(String[] args){Test t = new Test();//调用的是int类型的参数方法t.max(2, 5);  //调用的是short类型的参数方法short a=2;short b = 4;t.max(a,b);}}

输出结果:

     

 

t.max(2,5)调用的是void max(int a,int b),再比较这个两个值的大小,结果输出是5t.max(a,b),传入的是虽然是24,但强制转换成short类型,所以调用的是void max(short a, short b),结果输出是4



2.Override:获取人和学生的相关信息。

//获取人和学生的相关信息class Person{private String name;private int age;public void setName(String name){this.name=name;}public void setAge(int age){this.age=age;}public String getName(){return name;}public int getAge(){return age;}public String getInfo(){ //父类只有name合age属性return "Name: " + name + "\n" + "age: " +age;}}class Student extends Person{private String school;  //除了有父类的name和age外,还有自己的的school属性 public String getSchool(){ return school;}public void setSchool(String school){ this.school=school;}//重写了父类的方法,把自己特有的school属性也实现public String getInfo(){return "Name: " + getName() + "\n" + "age: " +getAge() + "\nschool: " +school;}}public class TestOverWrite{public static void main(String arg[]){Student student = new Student();Person person = new Person();person.setName("lee");person.setAge(24);student.setName("Angelo");student.setAge(18);student.setSchool("北理工");person.getInfo();student.getInfo();System.out.println(person.getInfo());  //person的信息,父类System.out.println(student.getInfo());  //student的信息,子类}}

      输出结果:

                       

      通过这两个小例子,对于重载与重写有了简单明了的认识。重写在多态当中的好处表现出了OOP的好处,经过实践后会有更深的体会,接下来会继续去认识多态。


0 0