A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 余海龙 于 2012-2-6 14:00 编辑

多态:
        体现:父类的引用指向了子类的对象。
                基本操作思想:以前创建本类对象,调用该对象的方法,指挥对象做事情,可是当对象太多是,指挥变的很麻烦。               
                                        可以找到这些对象的共性类型,对这些共性类型进行操作,这样可以把复杂的事情简单化
        前提:类与类之间必须有关系,要么继承,要么实现。
                  一般都会有覆盖动作。
        好处:提高了程序的扩展性。
                  后期派生出来的子类的功能内容可以被前期所写的代码使用。
        局限性:只能使用子类覆盖父类中的功能,子类的特有功能,不能使用。

例子:

Animal a = new Cat();  // 类型(引用型)提升。向上转型。   
a 只能用Animal中的方法。                              
                                                        
Cat c = (Cat)a; // 向下转型。                                
c 即可用Animal中的方法,也可以用Cat中的方法。
Dog d=(Dog)a; // 类型转换异常         



向下转型:当需要调用到子类的特有数据时。
向上转型:当只使用子类覆盖父类功能的功能,不使用子类特有功能时。(强制转换异常)
例子:
毕姥爷 x = new 毕老师();
x.讲课();// 调用的是(子类)毕老师的讲课功能

毕老师 y = (毕老师)x;
y.看电影();// 调用的是(子类)毕老师的看电影功能。
判断应用型对象所属类型:用 instanceof
        (对象名  instanceof  引用类型) 返回boolean类型值
判断子类型,强转父类型
(面试)
多态出现后,调用子类成员的特点:
1,        成员变量:
编译运行看左边。
2,        成员函数:
编译看左边、运行看右边
(所属于对象)
3,        静态函数:
编译运行看左边

        静态方法是绑定在所属的类上的,所以他只参考引用变量所属的类。
例子:
Fu  f = new  Zi ();
f.num = 2; //  给父类变量num赋值 ,引用谁,调用谁。
f.method()  ;// 调用时,编译检查父类是否有method()函数,运行调用子类中的method方法
// 如果method()方法是静态的,调用的是父类的method()方法。
因为静态方法绑定在所属的类上。


评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

2 个回复

倒序浏览
所谓继承就是把父类的所有东东给子类,如果一个儿子继承了老子的所有遗产,儿子没有动用遗产一毛钱,那么这个儿子就跟老子是一样的东西,如果儿子动用了老子的财产没有加@override字样,就出现了2个同名的方法,编译器不让通过,加了@override字样,注解帮你下决定用儿子的方法

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
张建银 发表于 2012-2-2 15:23
所谓继承就是把父类的所有东东给子类,如果一个儿子继承了老子的所有遗产,儿子没有动用遗产一毛钱,那么这 ...

Java大小写敏感,应该是:@Override,而不是@override
  1. class Test
  2. {
  3.         void print()
  4.         {
  5.                 System.out.println("I am Test...");
  6.         }
  7. }
  8. class  TestDemo extends Test
  9. {
  10.        
  11.         public static void main(String[] args)
  12.         {            
  13.                 Test t = new TestDemo();
  14.                 t.print();
  15.         }   
  16.           
  17.         @Override  
  18.         void print()
  19.         {
  20.                 System.out.println("I am TestDemo...");
  21.         }                    
  22. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
admin + 1 很细心!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马