Tag: 多态

强制调用基类方法

运行时的以下代码显然会打印出“B1 / A2 / B2”。 现在,是否有可能打印“A1 / A2 / B2”(即A#method2()应该在A上调用method1(),而不是在B上调用?) 注意:我没有这样的需要获得传递多态性,这个问题仅仅是出于好奇。 class A { public void method1() { System.out.println(“A1”); } public void method2() { method1(); System.out.println(“A2”); } } class B extends A { @Override public void method2() { super.method2(); System.out.println(“B2”); } @Override public void method1() { System.out.println(“B1”); } } public class Tmp { public static […]

Java多态性

出于好奇,这是一个问题。 我知道当我们通过引用它的超类来调用子类对象的重写方法时,JVM重视对象的类型而不是引用的类型。 这是我的简单代码: class Animal { void eat() { System.out.println(“Animal is eating…”); } } class Horse extends Animal { @Override void eat() { System.out.println(“Horse is eating…”); } } public class PolymorphismTest { public static void main(String…args) { Animal a=new Animal(); a.eat(); Animal h= new Horse(); h.eat(); } } 正如所料,我得到了输出: run: Animal is eating… Horse is […]

如何从静态main()方法调用内部类的方法

尝试在Parent类中创建1个接口和2个具体类。 这将使封闭类成为内部类。 public class Test2 { interface A{ public void call(); } class B implements A{ public void call(){ System.out.println(“inside class B”); } } class C extends B implements A{ public void call(){ super.call(); } } public static void main(String[] args) { A a = new C(); a.call(); } } 现在我不确定如何在静态main()方法中创建类C的对象并调用类C的call()方法。 现在我在线上遇到问题: A a = […]

Java – 具有相同方法的不同对象的数组

我正在练习inheritance。 我有两个类似的类,我想要同化为一个数组,所以我想使用Object类作为超类,因为所有东西都是Object的子级。 所以,例如我将T类和CT类放入一个名为all的数组中: Object all[] = new Object[6]; all[0] = T1; all[1] = CT2; all[2] =T3; all[3] = CT1; all[4] = T2; all[5] = CT3; 我跳过了声明,因为那不是我的问题。 当我希望使用循环调用数组中的函数时,我的真正问题就变成了: for (int i = 0; i < 6; i++) { all[i].beingShot(randomNum, randomNum, AK47.getAccuracy()); } 分别涉及T和CT的类都有areShot方法,这是公开的。 Eclipse建议将它们作为快速修复。 我想知道除了创建我自己的持有beingShot方法的Object类,或者将其添加到Object类之外是否有任何逻辑替代方法,尽管我觉得这些选择中的任何一个都会在长期内导致更多问题。 谢谢!

Javainheritance与多态

inheritance和多态是否构成IS-A关系? 并且在运行时发生inheritance和“重写”多态是真的,而在编译时发生“重载”多态吗? 我问这个的原因是因为许多论坛似乎给出了相互矛盾且经常令人困惑的答案。 谢谢!

构造函数中的多态方法(Java)

A类在构造函数中调用公共方法f() 。 B类用自己的实现覆盖方法f() 。 假设您实例化对象B ..对象B方法f()将在对象A的构造函数中调用,尽管对象B未完全初始化。 谁能解释这种行为? 编辑:是的,它不推荐练习..但我不明白为什么 Java没有调用基类A的f()实现而不是“伸出”到派生类B的f()实现。 码: class A { A() { System.out.println(“A: constructor”); f(); } public void f() { System.out.println(“A: f()”); } } class B extends A { int x = 10; B() { System.out.println(“B: constructor”); } @Override public void f() { System.out.println(“B: f()”); this.x++; System.out.println(“B: x = ” + x); […]

在java中,我们可以将超类Object传递给子类引用吗?

在java中,我们可以将超类Object传递给子类引用吗? 我知道这是一个奇怪的问题/实际上不可行,但我想理解这背后的逻辑为什么它不允许在java中。 class Employee { public void met1(){ System.out.println(“met1”); } } class SalesPerson extends Employee { @Override public void met1(){ System.out.println(“new met1”); } public void met2(){ System.out.println(“met2”); } } public class ReferenceTest { public static void main(String[] args) { SalesPerson sales = new Employee(); // line 1 sales.met1(); // line 2 sales.met2(); // line 3 […]

为什么在使用超类引用调用子类方法时会出现编译时错误?

我知道在方法覆盖的情况下会发生多态。 但我对下面的内容感到有些困惑。 class A { public void hi() { System.out.println(“A “+this.getClass().getName()); } } class B extends A { public void bye() { System.out.println(“B “+this.getClass().getName()); } } class Ideone { public static void main (String[] args) throws java.lang.Exception { A a = new B(); a.hi(); a.bye(); } } 输出: Main.java:35: error: cannot find symbol a.bye(); ^ […]

什么是java中的多态方法?

我正在研究用于SCJP测试的java语言。 理解“多态方法”有点难。 你能帮我解释一下吗? 或者给我一些链接?

强制基本方法调用

Java或C#中是否有强制inheritance类来调用基础实现的构造? 你可以调用super()或base()但是如果没有调用它可能会抛出编译时错误吗? 那会很方便.. – 编辑 – 我主要是对重写方法感到好奇。