Java @Overide做了什么

@Overide表示了该类中的方法显示地覆盖了父类的方法,这个事情一定发生在类继承关系中。

比如我们先定义一个CD类,该类默认会继承Object类,Object中常用的方法有tostring().equals()等等。

一 知识准备

基本tezhi覆盖(override)与重载(overload)的区别:

重载(overload)指在方法名不同,但参数列表相同的函数,即函数签名不同。可以发生在基本函数中,也可以发生在类继承过程中。

盖(override)指方法名和参数列表都相同的函数,即函数签名相同。一般特指在类继承关系中才会发生该过程,即只会在面向对象中发生。而重载(overload)可以在非面向对象语言中也可能发生。

 

二 @Override

在eclips中,可以使用在窗口中source》Override/implement method命令栏,点击后会弹出要覆盖父类哪些方法,如下所示:

 

测试源代码为:

package notebook;

public class CD {
  private String title;
  private String  artist;
  private int numofTracks;
  private boolean gotIt = false;
  private String comment;
  
	public CD(String title, String artist, int numofTracks, boolean gotIt, String comment)
	{
	super();
	this.title = title;
	this.artist = artist;
	this.numofTracks = numofTracks;
	this.gotIt = gotIt;
	this.comment = comment;
    }
	
	
	@Override
	public boolean equals(Object obj) {
		// TODO Auto-generated method stub
		CD cc  = (CD)obj;//向下造型
		
		return artist.equals(cc.artist);
	}


	public void add(CD cd)
	{
		
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
CD cd1 = new CD("a","b",3,true,"...");
CD cd2 = new CD("a","b",3,true,"...");
System.out.println(cd1.equals(cd2));
	}

}

我们重新覆盖了equals()方法。结果如下所示:

 

三 分析

如果我们把@Override注释掉,就可以改变入参的类型,返回值等等

报错:

注释后,成功:

此时已经不是覆盖,而是变成了重载。因为函数签名已经变化了,这里是函数参数列表发生了变化。

我们知道Object.equals()中原来方式的入参就是Object类型,所以使用    @Override 修饰器的目的就是告诉编译器,该方法是覆盖。要保证函数名,参数列表和父类的一致。当然其中的具体实现可以自己修改。

当然@Override还能帮助自检,当发生一些修改时,可能会改变覆盖的特性,此时就会提示错误。

需要注意的是覆盖和重载的区别和联系,理解好这2个定义后,就不难理解为什么会有@Override这个修饰器了,因为要方便程序员阅读和理解嘛。

 

 

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值