重载与重写

   Java中的重载(overload)与重写(override)是Java面向对象编程特别是多态中比较重要的概念,两者的比较也是笔试中经常遇到的问题,现在举几个例子,对这两者稍加探索。


  重载不多说,要求重载的方法有相同的方法名,但是参数不一样(数量,类型,顺序),注意返回值类型不算,因为返回值类型是函数执行完之后才能确定的,如果有两个方法除返回值类型不同其它全相同,Java虚拟机会认为这是同一个方法,并报错:

public class OverloadTest {
         
	public static double fun(int a, int b) {
		return a + b;
	}

	public static int fun(int a, int b) {
		return a + b;
	}
	public static void main(String[] args) {
	
	}
}

 重写要求就比较严格,需要类之间有继承关系,还要求方法有相同的签名返回值类型

public class OverrideAndOverloadTest1 {
    public static void main(String[] args) {
        A a = new A();
        a.p(10);
        a.p(10.0);
    } 
}

class B {
    public void p(double i) {
        System.out.println(i * 2);
    }
}

class A extends B {
    //This method overrides the method in B 
    public void p(double i) {
        System.out.println(i);
    }
}

运行结果:


可以看到因为重写(覆盖)的关系只会调用类A中的p方法,可以在注释下面加上@Override标记。

下面看看对应的一个例子:

public class OverrideAndOverloadTest2 {
    public static void main(String[] args) {
        A a = new A();
        a.p(10);
        a.p(10.0);
    }
}

class B {
    public void p(double i) {
        System.out.println(i * 2);
    }
}

class A extends B {
    // This method overloads the method in B
    public void p(int i) {
        System.out.println(i);
    }
}

运行结果:


这里因为是改变了参数的类型而产生了父类子类间的方法重载,参数是10就调用子类参数类型是整型的方法,是10.0就调用父类参数类型是双精度浮点型的p方法。如果在注释处强行添加@Override就会报错!



小结:

①方法重写发生在通过继承而相关的不同类中;方法重载可以发生在同一个类中,也可以发生在由于继承而相关的不同类中。

②方法重写具有同样的签名和返回值类型;方法重载具有同样的名字,不同的参数列表,不管返回值!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值