刚学面向对象的时候,重载和重写怎么也记不住,经常混淆了,看了几遍都不行,今天我就简单的写一写他们的区别。
重载(overload):
(1)发生在同一个类里;
(2)方法的名称要相同;
(3)参数列表(有无参数,参数类型,参数顺序,参数数量)不能相同;
public class TestOverload {
//重载方法1
public void run(String name,String occasion) {
System.out.println(name + "在" + occasion + "上班");
}
//重载方法2
public void run(String name){
System.out.println(name);
}
public static void main(String[] args) {
TestOverload p=new TestOverload();
//根据对象设置的参数的类型来调用相应的重载方法
p.run("周三");//调用重载方法2
p.run("李四","杭州");//调用重载方法1
}
}
// 结果: 周三
// 李四在杭州上班
重写(覆盖)override:
(1)发生在子类和父类(继承)中;
(2)方法的名称和参数列表都要一样,只有方法体不同;
(3)调用不同的重写方法是根据对象属于哪个类来调用;
如;父类对象则调用父类的方法,子类对象调用的是子类的方法。
//定义一个父类
public class texcx {
public void play(){
System.out.println("这是父类的测试方法");
}
}
//定义一个子类,并且继承了父类
public class texcx1 extends texcx{
@Override
public void play() {
//这是继承父类的方法
super.play();
//这是子类重写的方法
System.out.println("这是子类");
}
public static void main(String[] args) {
texcx1 p=new texcx1();
p.play();
}
}
//测试结果 这是父类的测试方法
// 这是子类