小编Dre*_*mer的帖子

指向基类的动态多态性引用

我需要澄清Java的动态多态性.

class Foo {
  int a=3;
  public void display() {
    System.out.println(" in foo "+a);
  }
}

class Bar extends Foo {
  int a=8;
  public void display() {
    System.out.println(" in boo "+a);
  }
}

public class Tester {
 public static void main(String[]args) {
  Foo f = new Bar();
  f.display();
  System.out.println(f.a);
 }
}
Run Code Online (Sandbox Code Playgroud)

这里当我创建一个带有基类引用的子类对象时,在调用该方法时f.display()它会将输出作为in boo 8.这是因为动态多态性在运行时检查对象类型以调用方法.

现在在打印f.a时打印3因为变量无法在java中被覆盖,这称为隐藏.这就是为什么它显示基本变量值而不是子变量值.

现在我的问题是f是基类的引用,它指向子类对象.那么如何f.a指向基本变量.场景背后会发生什么?引用如何指向基类?

(我知道规则,但我想知道如何/为什么?)

java dynamic

5
推荐指数
1
解决办法
74
查看次数

在java中System.out.println的奇怪行为

class Foo {}
class Boo extends Foo {}

public class Tester {
 public static void main(String[]args) {
 Foo f = new Foo();
 Boo b = new Boo();
 System.out.println("****"+f==b+"****");//line 1
 boolean flag = f==b;
 System.out.println("****"+flag+"****");//line 2
 }
}
Run Code Online (Sandbox Code Playgroud)

对于line1输出,false
对于line2输出,****false****
对于第2行,它正确连接.

我的问题是为什么第1行它只是打印值而不是正确的星形输出.

java

1
推荐指数
1
解决办法
81
查看次数

标签 统计

java ×2

dynamic ×1