java面经第001篇之重载和重写的区别

重载:

要求:两同一不同

两同:发生在同一个类中,方法名相同;

一不同:形参列表不同;

方法返回值类型、访问修饰符,与重载无关;

例如:

public class Overload {

	public void test(){
		System.out.println("无参数");
	}
	
	public void test(String str){
		System.out.println("重载test方法,有参数:" + str);
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Overload ol = new Overload();
		ol.test();
		ol.test("hello");
	}
}

编译运行上面代码,运行结果为:

方法返回值类型与重载无关的原因是:

       对于int test()与void test() 两个方法,如果调用int result = test();,系统可以识别是调用返回值类型为int的方法,但java调用方法时可以忽略方法的返回值,如果直接调用test();,系统无法判断是调用哪个方法。

 

重写:

要求:发生在父子类中,两同两小一大

两同:方法名相同,形参列表相同;

两小:子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等;

一大:子类的方法的访问权限应比父类的方法的访问权限更大或相等(当父类方法具有private访问权限时,子类无法访问父类方法);

例如:

public class Bird {

	public void fly(){
		System.out.println("我能飞...");
	}
}
public class Ostrich extends Bird{

	public void fly(){
		System.out.println("我能跑...");
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Ostrich os = new Ostrich();
		os.fly();
	}
}

编译运行上面代码,运行结果为:

       当子类重写父类的方法后,子类的对象将无法访问父类被重写的方法,但可以在子类方法中使用super(实例方法)或者父类的类名作为调用者来调用父类中被重写的方法。

public class Ostrich extends Bird{

	public void fly(){
		super.fly();
		System.out.println("我能跑...");
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Bird b = new Bird();
		b.fly();
		Ostrich os = new Ostrich();
		os.fly();
	}
}

编译运行上面代码,运行结果为:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值