Tag: 多态

需要Java代码段输出说明

我的代码是: class Foo { public int a=3; public void addFive() { a+=5; System.out.print(“f “); } } class Bar extends Foo { public int a=8; public void addFive() { this.a += 5; System.out.print(“b “); } } public class TestClass { public static void main(String[]args) { Foo f = new Bar(); f.addFive(); System.out.println(fa); } } 输出: b […]

我可以覆盖Java中的私有方法吗?

我知道我可以使用reflection来调用私有方法,并获取或设置私有变量的值,但我想覆盖一个方法。 public class SuperClass { public void printInt() { System.out.println(“I am ” + getClass() + “. The int is ” + getInt()); } private int getInt() { return 1; } } public class SubClass extends SuperClass { public static void main(String[] args) { (new SubClass()).printInt(); } public int getInt() { return 2; } } 我希望SubClass的main方法打印出2 […]

为什么在一个instanceOf之后施放?

在下面的例子中(来自我的coursepack),我们想要给Square实例c1提供一些其他对象p1的引用,但前提是这两个对象是兼容的类型。 if (p1 instanceof Square) {c1 = (Square) p1;} 我在这里不明白的是,我们首先检查p1确实是一个Square ,然后我们仍然投射它。 如果它是一个Square ,为什么演员呢? 我怀疑答案在于明显和实际类型之间的区别,但我很困惑…… 编辑: 编译器将如何处理: if (p1 instanceof Square) {c1 = p1;} EDIT2: 问题是instanceof检查实际类型而不是表观类型吗? 然后演员改变了表观类型? 谢谢, JDelage

编译器错误:引用调用模糊

情况1 static void call(Integer i) { System.out.println(“hi” + i); } static void call(int i) { System.out.println(“hello” + i); } public static void main(String… args) { call(10); } 案例1的输出:hello10 案例2 static void call(Integer… i) { System.out.println(“hi” + i); } static void call(int… i) { System.out.println(“hello” + i); } public static void main(String… args) { call(10); } […]

多态是否适用于Java中的类属性?

我知道当使用父类引用来引用子类对象时,OOP中多态性的常见用法是这样的: Animal animal = new Animal(); Animal dog = new Dog(); 我知道多态性适用于类方法,但它是否也适用于类属性? 我尝试用这个小例子来测试它: public class Main{ public static void main(String args[]){ Animal animal = new Animal(); Animal dog1 = new Dog(); Dog dog2 = new Dog(); System.out.println(“Animal object name: ” + animal.name); System.out.println(“Dog1 object name: “+dog1.name); System.out.println(“Dog2 object name: ” + dog2.name); animal.print(); dog1.print(); dog2.print(); […]