Java - array of different objects that have the same method(s)
我在练习继承。
我有两个类似的类,我想把它们同化到一个数组中,所以我想用对象类作为超类,因为所有的东西都是对象的子类。
例如,我将t类和ct类放入一个名为all like so的数组中:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
我跳过了声明,因为这不是我的问题。
当我希望使用循环调用数组中的函数时,我的真正问题是:
1 2 3 4 | for (int i = 0; i < 6; i++) { all[i].beingShot(randomNum, randomNum, AK47.getAccuracy()); } |
分别涉及t和ct的类都有beingshot方法,这是公共的。
Eclipse建议将其作为快速修复。我在想,除了创建自己的对象类来保存beingshot方法,或者将其添加到对象类之外,是否还有其他逻辑选择,尽管从长远来看,这些选择中的任何一个都会导致更多的问题。
谢谢!
如果两个类都实现相同的方法,那么您应该考虑创建一个
接口功能强大,易于使用。
您可以调用接口
您可以创建一个实现可拍摄的不同对象的数组,并对它们进行相同的处理。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | // Define a VERY simple interface with one method. interface Shootable { public void beingShot(); } // Any class that implements this interface can be treated interchangeably class Revolver implements Shootable { public void beingShot() { System.out.println("Revolver: firing 1 round"); } class MachineGun implements Shootable { public void beingShot() { System.out.println("Machine Gun: firing 50 rounds"); } } class HockeyPuck implements Shootable { public void beingShot() { System.out.println("Hockey Puck: 80 MPH slapshot"); } } class RayBourquePuck implements Shootable { public void beingShot() { System.out.println("Hockey Puck: 110 MPH slapshot"); } } class OunceOfWhiskey implements Shootable { public void beingShot() { System.out.println("Whiskey Shot: 1 oz down the hatch..."); } } // You can declare an array of objects that implement Shootable Shootable[] shooters = new Shootable[4]; // You can store any Shootable object in your array: shooters[0] = new MachineGun(); shooters[1] = new Revolver(); shooters[2] = new HockeyPuck(); shooters[3] = new OunceOfWhiskey(); // A Shootable object can reference any item from the array Shootable anyShootableItem; // The same object can to refer to a MachineGun OR a HockeyPuck anyShootableItem = shooters[0]; anyShootableItem.beingShot(); anyShootableItem = shooters[2]; anyShootableItem.beingShot(); // You can call beingShot on any item from the array without casting shooters[0].beingShot(); shooters[1].beingShot(); // Let's shoot each object for fun: for (Shootable s : shooters) { s.beingShot(); } |
这是一个很好的相关问题和答案。
您需要将您的
对于从您的
但是打字是一件很难看的事情。你应该尽量避免。如果您必须根据精确的子类选择要调用的方法,那么您可能应该使用
我认为你已经掌握了足够的关于如何实现它的信息。
对象没有Beingshot方法。如果数组中的所有对象都属于同一类,那么数组应该属于同一类。否则,它们都应该实现相同的接口或扩展相同的类。我无法想象为什么要在这里显式扩展对象,它不添加任何功能。
你不能这么做……因为Java不支持扩展方法。(C)
阅读以下链接:
等价于C扩展方法的Java语言