Java 如何创建我可以使用的两个类和标记方法的接口?
我需要类武器,它将使用步枪中的shoot()方法和散弹枪中的reload()方法 我如何使用接口来实现这一点? 想象一下,我不能修改步枪和猎枪 我的错误认识是Java 如何创建我可以使用的两个类和标记方法的接口?,java,interface,extends,implements,Java,Interface,Extends,Implements,我需要类武器,它将使用步枪中的shoot()方法和散弹枪中的reload()方法 我如何使用接口来实现这一点? 想象一下,我不能修改步枪和猎枪 我的错误认识是 class Rifle { void shoot() { System.out.println("rifle shoot"); } void reload() { System.out.println("rifle reload"); } void onlyRif
class Rifle {
void shoot() {
System.out.println("rifle shoot");
}
void reload() {
System.out.println("rifle reload");
}
void onlyRifle() {
System.out.println("rifle!");
}
}
class Shotgun {
void shoot() {
System.out.println("shotgun shoot");
}
void reload() {
System.out.println("shotgun reload");
}
void onlyShotgun() {
System.out.println("shotgun!");
}
}
这是我想要的工作,但是我怎样才能更简单地使用接口呢?
武器
应该是一个接口:
interface Weapon
{
void shoot();
void reload();
}
public class Weapon {
WeaponType weaponType;
public Weapon(WeaponType weaponType) {
this.weaponType = weaponType;
}
public void shoot() {
this.weaponType.shoot();
}
public void reload() {
this.weaponType.reload();
}
}
然后在具体实例中,实现该接口:
interface Weapon
{
void shoot();
void reload();
}
public class Weapon {
WeaponType weaponType;
public Weapon(WeaponType weaponType) {
this.weaponType = weaponType;
}
public void shoot() {
this.weaponType.shoot();
}
public void reload() {
this.weaponType.reload();
}
}
然后,假设你有
r
,这是Rifle
的一个实例,你可以将r
添加到武器的集合中。你不太可能只需要MyRifle
:步枪
-具体的东西只需要在构造时传递。一种方法是定义接口武器,并有两个新类,让我们称它们为MyRifle,它扩展了步枪并实现了武器,而MySHotgun则扩展了霰弹枪并实现了武器
要求您扩展现有类,因为您提到无法修改现有类
所以
及
尝试使用相同的组合,并使用如下界面:
class MyRifle extends Rifle implements Weapon{
// actual implementations of your methods
}
你有一个超级武器,需要一个武器类型。WeaponType是一个具有射击和重新装载方法的界面
interface Weapon {
void shoot();
void reload();
}
class ModifiedRifle implements Weapon {
Rifle myRifle;
Shotgun myShotgun;
public ModifiedRifle (Rifle rifle, Shotgun shotgun) {
this.myRifle = rifle();
this.myShotgun = shotgun;
}
public void shoot() {
myRifle.shoot();
}
public void reload() {
myShotgun.reload();
}
}
您的界面:
interface Weapon
{
void shoot();
void reload();
}
public class Weapon {
WeaponType weaponType;
public Weapon(WeaponType weaponType) {
this.weaponType = weaponType;
}
public void shoot() {
this.weaponType.shoot();
}
public void reload() {
this.weaponType.reload();
}
}
你的猎枪等级:
public interface WeaponType {
public void shoot();
public void reload();
}
用法示例:
public class Shotgun implements WeaponType {
@Override
public void shoot() {
System.out.println("Shotgun shoot!");
}
@Override
public void reload() {
System.out.println("Shotgun reload!");
}
}
如果你不能更改
Rifle
和Shotgun`,我看不出接口对你有什么帮助,因为你不能更改这些类来实现接口。你说你不能修改这些类,你还能在它们里面写这么多吗。。工具武器创建武器对象需要什么?或者你可以创建任何对象?就目前而言,这将无限期地递归。当您在Rifle
的实例上调用.onlyRifle()
时,它将在它存储的实例myRifle
上调用它,这将在它存储的实例上调用它,等等。拆下功能体。原则仍然有效。是的,原则是正确的,这就是为什么我没有投反对票:)