重载和重写的定义
重载是在同一个类中定义多个同名的方法,但每个方法中的有不同的参数,或者参数的个数不同。java会通过编译器匹配方法,如果找不到参数匹配的方法,或者多个相同的参数的方法,就会产生编译错误。
下面给出一个例子
public class Teacher {
private String name;//姓名
private int old;//年龄
private String job;//职称
//构造函数
Teacher(){
}
//构造函数
public Teacher(String name, int old, String job) {
this.name = name;
this.old = old;
this.job = job;
}
public void show(){
System.out.println("姓名:"+name);
System.out.println("年龄:"+old);
System.out.println("职称:"+job);
}
public void show( String classroom){//重载show方法
System.out.println("姓名:"+name);
System.out.println("年龄:"+old);
System.out.println("职称:"+job);
System.out.println("班级:"+classroom);
}
public static void main(String[] args) {
Teacher t=new Teacher("小王",30,"班主任");
t.show();
t.show("A1912");
}
}
前面的shouw()的结果,后面是show(String classroom)的结果
重写的定义
java中所有的类都来自java.lang.Object ,在java中重写是一个很重要的思路,重写是指方法名,和形参都不会改变,重写是因为原有的函数不符合自身的需求时,所以需要重写方法来满足自己的要求。
下面给出例子
在java中有个toString()方法,还是上面的类。我们将 t.show(); t.show(“A1912”); 注释掉。
package 第二章.重写和重载的区别;
public class Teacher {
private String name;//姓名
private int old;//年龄
private String job;//职称
//构造函数
Teacher(){
}
//构造函数
public Teacher(String name, int old, String job) {
this.name = name;
this.old = old;
this.job = job;
}
public void show(){
System.out.println("姓名:"+name);
System.out.println("年龄:"+old);
System.out.println("职称:"+job);
}
public void show( String classroom){//重载show方法
System.out.println("姓名:"+name);
System.out.println("年龄:"+old);
System.out.println("职称:"+job);
System.out.println("班级:"+classroom);
}
@Override//注解
public String toString() {
return super.toString();
}
public static void main(String[] args) {
Teacher t=new Teacher("小王",30,"班主任");
//t.show();
//t.show("A1912");
System.out.println(""+t);
}
}
得到的答案是
很明显不是我们要的答案我们想显示出和类成员不一样。所以我们需要重写toString()方法。
@Override//注解
public String toString() {
return String.format("姓名:%s\n年龄:%d\n 职称:%s",name,old,job);//格式化输出
}
再次运行就可以得到我们想要的答案了。
重写 | 重载 |
---|---|
方法中的参数,返回值类型,方法名都不可以改变 | 方法中的参数不同或参数的个数不同,返回值类型,方法名都不可以改变 |
PS:
toString()是返回对象的字符串形式,在java的帮助文档中写到建议所有的子类使用时重写该方法。