我需要在Java中实现继承的方法吗?

我需要在Java中实现继承的方法吗?,java,inheritance,overriding,getter,Java,Inheritance,Overriding,Getter,说到Java,我是一个初学者,我有两个问题非常关心 @Override不是一种代码复制吗?我的意思是,让我考虑一下情况。 我在父类中实现了一个函数。然后我创建一个子类,该子类从父类继承此方法。我现在可以在这个类中再次使用它,而无需在这个类中实现它。但这是一种好的做法吗?或者我应该写@Override并再次实现这个函数? 我需要@Override父类中的setter和getter吗?并在Child中实现它们-就像前面的问题一样。或者它们应该在父类中是抽象的? 提前感谢: 类动物{/*父类*/ 私家

说到Java,我是一个初学者,我有两个问题非常关心

@Override不是一种代码复制吗?我的意思是,让我考虑一下情况。 我在父类中实现了一个函数。然后我创建一个子类,该子类从父类继承此方法。我现在可以在这个类中再次使用它,而无需在这个类中实现它。但这是一种好的做法吗?或者我应该写@Override并再次实现这个函数? 我需要@Override父类中的setter和getter吗?并在Child中实现它们-就像前面的问题一样。或者它们应该在父类中是抽象的? 提前感谢: 类动物{/*父类*/ 私家车; 受保护的弦声; 公共动物腿、弦音{ this.numOfLegs=numOfLegs; 这个声音=声音; } 公共int getNumOfLegs{ 返回双腿; } 公共空间制造声音{ 系统输出打印声音; } } 类Dog扩展了动物{/*子类*/ 公共狗腿,弦乐{ 超人的腿,声音; } @Override/*是否有必要实现继承的函数*/ 公共空间制造声音{ 系统输出打印声音; } /*我需要实现继承的getter吗/* }
顾名思义,重写的目的是重写/替换/更改父方法的行为。用相同的实现重写方法没有意义。如果您不想更改任何内容,可以只使用继承的方法。

正如名称所示,重写的目的是重写/替换/更改父方法的行为。用相同的实现重写方法没有意义。如果不想更改任何内容,可以使用继承的方法

@Override不是一种代码复制吗

如果您在父级中复制了相同的代码,那么就失去了覆盖的目的:为父级已定义的方法定义新代码

相反,它是关于代码重用的:我们重用对我们有用的方法,这些方法我们不重写,也不想在一个单独的新类中重复,我们只重写需要更改的方法

…这是一种好的做法吗

重写代码不是一个好的做法,而是修改从父类继承的方法的行为。我们这样做有很多原因

或者我应该写@Override并实现这个函数一次 又来了

同样,只有在需要时才重写该方法

好的做法是,当你重写一个方法时,你应该用@override注释它如果你不这样做,它也会起作用,但是您将丢失编译器可以通过此注释提供的有用信息:例如,检查您是否确实重写了该方法,并且没有创建重载,因为该方法签名与父方法中的签名不同

我需要@Override父类中的setter和getter吗

有时,只有在用例需要的情况下才会这样做,但这种情况并不常见

或者它们应该在父类中是抽象的

关于它们的抽象性,这是一个完全不同但密切相关的话题,我知道

只有在父类中没有足够的信息来实现这些方法时,它们才应该是抽象的,这些信息取决于子类中的具体实现

示例用例:

大多数鸟都会飞,对吧,有些鸟不会:如果我们创建一个类Bird,我们可以有一个方法getMovement返回fly。现在如果我们创建一个类企鹅,我们需要覆盖它,因为它们不会飞。在Bird类中还有一个方法getCover,它返回羽毛,在Penguin类中我们不需要重写它,因为它们也有羽毛:

public class Bird {

    // for most birds this is OK, they fly
    public String getMovement() {
        return "Fly";
    }

    public String getCover() {
        return "Feathers";
    }

}

public class Penguin extends Bird {

    // penguins don't fly, so we need to override the parent method in order to create more realistic penguins
    @Override
    public String getMovement() {
        return "Walk";
    }
    //we don't override getCover because penguins do have "Feather"
}
@Override不是一种代码复制吗

如果您在父级中复制了相同的代码,那么就失去了覆盖的目的:为父级已定义的方法定义新代码

相反,它是关于代码重用的:我们重用对我们有用的方法,这些方法我们不重写,也不想在一个单独的新类中重复,我们只重写需要更改的方法

…这是一种好的做法吗

重写代码不是一个好的做法,而是修改从父类继承的方法的行为。我们这样做有很多原因

或者我应该写@Override并实现这个函数一次 又来了

同样,只有在需要时才重写该方法

现在,一个好的实践是,当你重写一个方法时,你应该用@override注释它。如果你不这样做,它也可以工作,但是 您将丢失编译器可以通过此注释提供的有用信息:例如,检查您是否确实重写了该方法,并且没有创建重载,因为方法签名与父项中的签名不同

我需要@Override父类中的setter和getter吗

有时,只有在用例需要的情况下才会这样做,但这种情况并不常见

或者它们应该在父类中是抽象的

关于它们的抽象性,这是一个完全不同但密切相关的话题,我知道

只有在父类中没有足够的信息来实现这些方法时,它们才应该是抽象的,这些信息取决于子类中的具体实现

示例用例:

大多数鸟都会飞,对吧,有些鸟不会:如果我们创建一个类Bird,我们可以有一个方法getMovement返回fly。现在如果我们创建一个类企鹅,我们需要覆盖它,因为它们不会飞。在Bird类中还有一个方法getCover,它返回羽毛,在Penguin类中我们不需要重写它,因为它们也有羽毛:

public class Bird {

    // for most birds this is OK, they fly
    public String getMovement() {
        return "Fly";
    }

    public String getCover() {
        return "Feathers";
    }

}

public class Penguin extends Bird {

    // penguins don't fly, so we need to override the parent method in order to create more realistic penguins
    @Override
    public String getMovement() {
        return "Walk";
    }
    //we don't override getCover because penguins do have "Feather"
}

您必须仅从父类重写您的方法才能重写超类。但是,当您的一些类实现它时,您必须重写来自Iterface的每个方法


所以,您可以在Dog类中使用一些方法,比如super.makeSound,或者如果您不想在子类中重写它,可以只使用makeSound,例如不要发出声音而是发出跳跃或其他

您必须仅从父类重写您的方法,才能重写超类。但是,当您的一些类实现它时,您必须重写来自Iterface的每个方法


所以,您可以在Dog类中使用一些方法,比如super.makeSound,或者如果您不想在子类中重写它,可以只使用makeSound,例如不要发出声音而是发出跳跃或其他

您只需要在希望更改继承的函数时重写方法!因此,两个问题的答案都是否定的。您只需要在希望更改继承函数时重写方法!所以你们两个问题的答案都是否定的。