黑马程序员——面向对象(多态与抽象类)

来源:互联网 发布:心知早早孕 编辑:程序博客网 时间:2024/06/10 18:12
-----------android培训java培训、java学习型技术博客、期待与您交流!------------
     今天学习多态与继承方面的知识,还是一句话重在理解。
     首先,多态的形式:
     简单的说就是父类的引用指向子类的对象。
     子父类成员的访问:
     1.父类对象的引用,不能访问子类的成员;
     2.子类对象的引用,可以访问:
      1).从父类继承的成员;
      2).自己的成员;
     多态的情况(父类指向子类对象):
     1.成员变量:
      1).父类没有,子类有:编译时,编译错误:找不到符号;
      2).父类没有,子类没有:编译时,编译错误:找不到符号;
      3).父类有,子类没有:编译通过,运行时:父类的;
      4).父类有,子类也有:编译通过。运行时:父类的;
    2.成员方法:
     1).父类没有,子类有:编译时,编译错误:找不到符号;
     2).父类没有,子类没有:编译时,编译错误:找不到符号;
     3).父类有,子类没有:编译通过,运行时:父类的;
     4).父类有,子类也有:编译通过,运行时:子类的;(方法在运行时是动态绑定的,绑定到当前调用的对象)
        汇总:
    1.多态时:
     1).编译时,如果父类没有,编译错误:找不到符号;
     2).运行时,对于被覆盖的成员变量,获取的父类的;对于被重写的成员方法,执行的是子类的;
      多态之中还有类型的强制转换,我觉得这种对象的强制转换和基本数据类型的转换有点相似。
      首先,当我们确定一个父类类型指向某一个之类的对象时,可以将父类类型转换成子类的类型。
      如果将一个父类类型转换为子类类型,在转换之前可以先进行判断,使用:instanceof运算符来判断:左边的变量是否是右边的类型
      最后,是关于抽象类,抽象类不能被实例化,创建抽象类没意义。
      1. 抽象类和一般类区别不大,类中出现不确定抽象的功能时,可以定义抽象方法,抽象方法没有方法主体。
      2.抽象类中可以有构造函数用来初始化成员变量.
      3.抽象关键字abstract不可以以下关键字共存。
    1).static。
    2).final : final类表示不能被继承,而abstract类就是被继承的,所以冲突;
            final方法表示不能被重写,而abstract方法就是被重写的,所以冲突;
    3).private :一个abstract方法就是被重写的,而private的成员在子类中无法访问;
     
    
    
                          -----------android培训java培训、java学习型技术博客、期待与您交流!------------
    
0 0