Java 我如何说出子类函数实现、@Override annotation和";的概念;超载“;功能分离?
我有一个这样的抽象类:Java 我如何说出子类函数实现、@Override annotation和";的概念;超载“;功能分离?,java,overriding,Java,Overriding,我有一个这样的抽象类: abstract class Player { //some stuff public abstract String getName(); } 在我正在实现的一个子类中(以及重载/重写?这里是我不确定的地方),通过再次键入整个函数来实现函数getName(): public String getName(){ return "John"; } 但我也可以在我的子类中简单地编写“getName()”,按enter键
abstract class Player {
//some stuff
public abstract String getName();
}
在我正在实现的一个子类中(以及重载/重写?这里是我不确定的地方),通过再次键入整个函数来实现函数getName():
public String getName(){
return "John";
}
但我也可以在我的子类中简单地编写“getName()”,按enter键,我的IDE会自动为我填写以下代码,这同样有效(如果在这种情况下我将null更改为“John”):
显然,因为它声明了“Override”,我在这里重写了抽象超类中的函数。但是,即使没有在函数上方加上“@Override”,我还没有重写函数吗
我想说的是:我有一个抽象函数,所以它只在子类中实现,而不是在超类本身中实现。这是否意味着通过实现它,我也会自动覆盖它,因为它在超类中没有实现?那我为什么要写@Override呢?或者如果我不在里面放“@Override”,我只是“超载”了 代码段中没有方法重载,只有重写。当具有不同签名(即不同参数)的多个方法具有相同名称时,会发生方法重载
@Override
注释是可选的。如果删除它,您的getName()
仍将覆盖该超类的抽象方法。使用此注释的优点是它有助于捕获错误-如果您试图重写一个未在类的任何超类或超接口中出现(具有相同名称和签名)的方法,如果您使用@override
注释,编译器将给您一个错误
因此,如果你写错了:
@Override
public String getname(){
return null;
}
或
编译器将给您一个错误。如果没有
@Override
注释,就不会出现错误(当然,如果没有实现抽象方法,就会出现错误,但是如果超类的getName()
不是抽象的,就不会出现错误,子类中的方法也不会覆盖超类的getName
方法)。如果你写信
abstract class Player {
public abstract String getName();
}
abstract class ConcretePlayer extends Player{
public String getMame() { //typo here
/* some code */
}
}
这将编译,您可能会在代码中引入bug,而
abstract class Player {
public abstract String getName();
}
abstract class ConcretePlayer extends Player{
@Override
public String getMame() { //exception here
/* some code */
}
}
将导致编译错误
abstract class Player {
public abstract String getName();
}
abstract class ConcretePlayer extends Player{
public String getMame() { //typo here
/* some code */
}
}
abstract class Player {
public abstract String getName();
}
abstract class ConcretePlayer extends Player{
@Override
public String getMame() { //exception here
/* some code */
}
}