Java多态机制的特色

class AP{
	public AP() {
		g();//这里到底会调用哪一个函数呢》是父类AP的,仍是子类A
	}
	
	public void f() {
		System.out.println("AP f()");
	}
	public void g() {
		System.out.println("AP g()");
	}
	
}

public class A extends AP{

	@Override
	public void f() {
		System.out.println("A f()");
	}
	
	@Override
	public void g() {
		System.out.println("A g()");
	}
	
	public static void main(String[] args) {
		AP instance  = new A();
		instance.f();
		instance.g();
	}
}


这个的输出结果为:java

A g()
A f()
A g()

结果分析:
运行结果告诉咱们,在建立子类时,同时也会调用父类的构造函数,
但,当咱们在构造函数 public AP()中调用g()时,代码运行的是
子类中覆盖的g()方法。

原理:
这个是因为java的动态绑定机制致使的,(绑定指的是讲一个方法调用和一个方法主体链接
到一块儿),就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象
方法。由于此时内存中存在的对象为 A class,因此在AP() {g();} 这里调用的g()方法
实体为    @Override
	public void g() {
		System.out.println("A g()");
	}


补充:程序员

只有类中的方法才有多态的概念,类中的成员没有,下面举个例子
class AP{
	public String string = "AP";
}

public class A extends AP{
	public String string = "A";
	public static void main(String[] args) {
		AP instance  = new A();
		System.out.println(instance.string);
	}
}

这段代码的输出结果为:面试

AP//而不是 A

参考资料:《Java程序员面试笔试》
ide

相关文章
相关标签/搜索