我需要在Java中实现继承的方法吗?
说到Java,我是一个初学者,我有两个问题非常关心 @Override不是一种代码复制吗?我的意思是,让我考虑一下情况。 我在父类中实现了一个函数。然后我创建一个子类,该子类从父类继承此方法。我现在可以在这个类中再次使用它,而无需在这个类中实现它。但这是一种好的做法吗?或者我应该写@Override并再次实现这个函数? 我需要@Override父类中的setter和getter吗?并在Child中实现它们-就像前面的问题一样。或者它们应该在父类中是抽象的? 提前感谢: 类动物{/*父类*/ 私家车; 受保护的弦声; 公共动物腿、弦音{ this.numOfLegs=numOfLegs; 这个声音=声音; } 公共int getNumOfLegs{ 返回双腿; } 公共空间制造声音{ 系统输出打印声音; } } 类Dog扩展了动物{/*子类*/ 公共狗腿,弦乐{ 超人的腿,声音; } @Override/*是否有必要实现继承的函数*/ 公共空间制造声音{ 系统输出打印声音; } /*我需要实现继承的getter吗/* }我需要在Java中实现继承的方法吗?,java,inheritance,overriding,getter,Java,Inheritance,Overriding,Getter,说到Java,我是一个初学者,我有两个问题非常关心 @Override不是一种代码复制吗?我的意思是,让我考虑一下情况。 我在父类中实现了一个函数。然后我创建一个子类,该子类从父类继承此方法。我现在可以在这个类中再次使用它,而无需在这个类中实现它。但这是一种好的做法吗?或者我应该写@Override并再次实现这个函数? 我需要@Override父类中的setter和getter吗?并在Child中实现它们-就像前面的问题一样。或者它们应该在父类中是抽象的? 提前感谢: 类动物{/*父类*/ 私家
顾名思义,重写的目的是重写/替换/更改父方法的行为。用相同的实现重写方法没有意义。如果您不想更改任何内容,可以只使用继承的方法。正如名称所示,重写的目的是重写/替换/更改父方法的行为。用相同的实现重写方法没有意义。如果不想更改任何内容,可以使用继承的方法 @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,例如不要发出声音而是发出跳跃或其他 您只需要在希望更改继承的函数时重写方法!因此,两个问题的答案都是否定的。您只需要在希望更改继承函数时重写方法!所以你们两个问题的答案都是否定的。