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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 0racle 中级黑马   /  2015-6-30 21:34  /  306 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

继承
        
        如果多个类中具有共性的内容,就把这些内容提取出来,放到一个类里面.
        那么该体系其他的类只要继承这个类,那么就应该可以拥有这些共性内容了.
        
        格式:
                class Student extends Person
                {
                        // ...
                }
        
        好处:
                提高代码的复用性
                使类与类之间产生了一个关系,是多态的前提.
        
        特点:
                java中的类只支持单继承, 避免多继承产生的调用不明确.
                支持多层(重)继承.
                子类继承了父类,那么子类就拥有了父类非私有的成员,子类不能继承父类私有的成员.
        
        什么时候定义继承:
                两个类之间体现的是 is a 的关系.
                尽量不要为了使用部分功能而继承.
        
        变量的使用
                使用变量时,变量的寻找范围是什么?
                        局部 -- 成员 -- 父类 -- 报错
               
                在局部位置想分别输出本类成员变量和父类成员变量的值?
                        成员  this.变量名
                        父类  super.变量名

        this 和 super
                this  本类对象的引用
                super 父类在内存中空间的标识.(可以理解成父类对象的引用)
               
                        class Fu
                        {
                                show()...
                        }
               
                        class Zi extends Fu
                        {
                                @Override
                                show()...
                                
                                public void fun() {
                                        super.show();
                                }
                        }
                        
                        Zi zi = new Zi(); // 此处创建了Zi类的对象.
                        zi.fun();
               
                应用:
                        构造方法中:
                                this(参数) -- 根据给定的参数去匹配使用本类中其他的某个构造方法
                                super(参数) -- 根据给定的参数去匹配使用父类中某个构造方法
                        成员方法
                                this.方法名() -- 调用本类的方法
                                super.方法名() -- 调用父类的方法
               
方法的重载和重写
        重写概念:
                当子类中出现与父类中方法声明完全相同的情况,称为方法的重写。
        
        重载和重写区别:
                方法重载:在同一个类中(这个是重点),出现方法名相同,参数列表不同的多个方法。与返回值类型无关。
                方法重写:在子父类间,出现方法声明完全相同(返回值类型、方法名、参数列表等)都相同的两个方法,称为重写。
                @Override -- 方法的上面, 这个方法就是重写父类的.

        需要注意的问题:
                父类中的私有方法不可以被重写。
                子类方法访问权限一定要大于等于父类方法访问权限
                        访问权限修饰符从小到大:
                                private -- 默认(什么也不写) -- protected -- public
                静态的方法只能被静态方法重写。这个其实不能算对象的关系。
                如果想使用父类被覆盖的功能,可以使用 super.方法名()  来调用.

        覆盖的应用:
                当子类需要父类的功能,而功能主体子类有自己特有内容时,
                可以复写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容。(用自己的话解释沿袭了父类的功能,定义了子类特有的内容)

带子父类关系的构造方法的执行
        1) 子类构造方法都默认访问了父类的无参构造
                原因: 构造方法的第一行默认都有一个super()语句.
                目的: 是为了对父类的成员进行初始化.
        2) 如果父类没有无参构造,怎么办?
                用super(参数) 去使用父类中存在的带参构造.
                用this(参数) 去使用本类中其他的构造,是因为这个构造可以访问父类的某一个构造.
        
代码块的执行顺序问题
        静态代码块: 就是用static修饰的一对{}
                static
                {
                        // ....
                }
        
        如果仅在一个类:
                静态代码库 -- 构造代码块 -- 构造方法
                静态代码块仅执行一次, 但是构造代码块每次创建对象都会执行
               
        如果是具有子父类关系的两个类:
                父类的静态代码块 -- 子类的静态代码块 -- 父类构造代码块 -- 父类的构造 --  子类构造代码块 -- 子类的构造
                静态代码块仅执行一次, 但是构造代码块每次创建对象都会执行.
        
子类使用父类私有成员的方式
        1) 通过父类提供的公共的getters 和 setters 方法
        2) 通过父类提供的带参数的构造方法, 并且构造方法里面要对私有成员属性进行赋值.
        
        -- 提供了显示的构造方法后,默认的无参构造可以不给(只要你用不到), 建议给上,是因为,可能会用到.
        
        可以通过提供公共的getter和setter来供子类使用,也可以通过公共的构造方法,供子类使用。
        基础思想都是一致的:对于私有的成员,除了在能所属类中使用之外,不能在其他任何地方直接使用。
        但是可以在所属类中定义公共的访问方式,然后外界通过这种公共的访问方式供其他类或者对象使用。

fianl关键字
        修饰类 -- 类不能被继承
        修饰成员方法 -- 方法不能被重写
        修饰成员变量 -- 变量其实是一个常量.
        
        finally关键字
        finalize() 方法

评分

参与人数 2黑马币 +7 收起 理由
宾格 + 4 赞一个!
想来学习 + 3 很给力!

查看全部评分

2 个回复

倒序浏览
小有不足。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马