标题: 深入多态机制 [打印本页] 作者: liumeng 时间: 2012-2-29 14:28 标题: 深入多态机制 class Father {
int a = 5;
public void m1() {
System.out.println("父类的方法");
}
}
class Son extends Father {
int a = 10;
public void m1() {
System.out.println("子类的方法");
}
public void m2() {
}
}
public class MyTest {
public static void main(String as[]) {
Father f = new Son();
System.out.println("a=" + f.a);
f.m1();
}
}
为什么a=5呢?不父类引用指向子类么作者: 田啸 时间: 2012-2-29 14:52
在你的程序里SON继承了FATHER,对于 Father f = new Son();,首先程序会初始化FAHTER,再初始化SON,对于变量 a来说,引用变量就近原则来说呢,就会先引用FATHER类中的.
这里涉及到加载的顺序,我写了个小例子:
class A{
//int i=1; //当访问时,才知道是否被初始化了
{
int i=1;
System.out.println("------"+i);
} //相当int i = 1,初始化时打印
public A(){
System.out.println("A构造函数调用了`````");
}
public void go(){
System.out.println("A----------------");
}
}
class B extends A{
{
int i=2;
System.out.println("*****"+i);
}
public B(){
System.out.println("B构造函数调用了`````");
}
public void go(){
System.out.println("B----------------");
}
}
public class Test {
public static void main(String[] args) {
A a=new B(); System.out.println(a.i );
}
}
简单先理解下多态的一些特点;
Father f = new Son();
这代表什么意思呢?
很简单,它表示我定义了一个Father 类型的引用,指向新建的Son类型的对象。由于Son是继承自它的父类Father ,所以Father 类型的引用是可以指向Son类型的对象的。那么这样做有什么意义呢?因为子类是对父类的一个改进和扩充,所以一般子类在功能上较父类更强大,属性较父类更独特,
定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性。