Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我如何说出子类函数实现、@Override annotation和";的概念;超载“;功能分离?_Java_Overriding - Fatal编程技术网

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 */
    }
}