LittleRain

小雨不打伞 打伞雨不小

SL275之多态

多态
eg :
class A{method();}
class B extends A{method();}
A a=new B();
a.method()调用的是B的method()方法。//a.method()执行是,应该看引用a具体指向的内存空间实际存在的是什么对象。从这里来看,引用a所指向的实际内存空间是B的实例。

方法的调用具体决定于运行时,编译器只是检查java语法的正误。

通过  对象.属性   的形式来获得属性值时,具体返回的属性值是依赖于对象引用的类型的。

而通过方法来获得对象的属性时,方法调用所返回的属性则决定于具体内存中存在的真正对象

(attention: 静态的方法这一条不适用)

Eg:
public class TestPoly {
 public static void main(String[] args) {
 
 Father1 f=new Child1();
        System.out.println(f.age);//在编译阶段就已经可以确定f.age的值是:45,因为在编译时不会生成对象,
                                              //直接看引用类型即可,所以下面的((Child1)f).age之间看f的类型即可。
        System.out.println(((Child1)f).age);

        f.printAge();//这个需要在运行是通过方法来决定结果,此时,f引用指向的是Child1类型的对象空间,所以调用的是Child类的pringAge()方法,从而得出结果是:90
      ((Child1)f).printAge();
        }
}

class Father1{
 int age=45;
 public void printAge(){
  System.out.println(age);
 }
}

class Child1 extends Father1{
 int age=90;
 public void printAge(){
  System.out.println(age);
 }
}

posted on 2006-10-04 15:33 小雨不打伞 阅读(322) 评论(0)  编辑  收藏 所属分类: SL-275学习笔记


只有注册用户登录后才能发表评论。


网站导航:
 

公告

点击这里给我发消息 QQ:232720563


  MSN:new_haihua@hotmail.com

导航

统计

常用链接

留言簿(2)

随笔分类(51)

最新随笔

积分与排名

最新评论

阅读排行榜