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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高盖茨 中级黑马   /  2015-12-7 23:02  /  776 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

代码块:
        概述:由{}括起来的内容。
        分类:
                局部代码块:
                        定义在局部位置,作用是让变量尽可能早的从内存中消失,节约内存,提高效率。

                构造代码块:
                        定义在成员位置。
                        作用:
                                里边存储的是所有构造方法的共性内容,因为它是优先于构造方法执行的,从而来提高代码的复用性和编写效率。
                静态代码块:
                        被static修饰的代码块。
                        作用:一般是用来加载驱动的,因为它是随着类的加载而执行。
                        特点:静态代码块只执行一次(类文件只加载一次的情况下)。

                同步代码块:(多线程的时候讲)
                        被synchronized修饰的代码块。


继承:
        概述:就是通过extends关键字让类与类之间产生 子父类关系,这种现象就叫继承。
        格式:
                class 类A extends 类B {        //子承父业
                }
        叫法:
                类A:子类,派生类
                类B:父类,基类,超类。

        好处:
                A:复用性。
                B:维护性。
                C: 让类与类之间产生关系,是多态的前提。

        弊端:
                耦合性太强了。
                开发原则:高内聚,低耦合。
                        耦合:类与类之间的关系。
                        内聚:类自己独立处理问题的能力。

        继承的特点:
                类与类之间的继承:
                        A:只支持单继承,不支持多继承。
                        B:Java支持多层继承。

                总结:看顶层,用底层。

                接口与接口之间的继承:
               
        继承的注意事项:
                A:子类只能继承父类的所有非私有成员(成员变量和成员方法)。
                B:子类不能继承父类的构造方法,但是可以通过super关键字去访问父类的构造方法。
                C:不用为了使用部分功能而去使用继承。

        什么时候使用继承?
                只有当类与类之间满足"is a"的关系的时候,就可以考虑使用继承。
                A is a B :        A是子类,B是父类
                B is a A :        A是父类,B是子类

        继承中的成员特点:
                成员变量:
                        使用变量遵循一个“就近原则”。局部位置有就使用,没有就去本类的成员位置找,有就使用;没有就去父类的成员位置找,有就使用,没有就报错.

                        this和super的区别:
                                this:代表本类当前对象的引用。
                                super:当前对象父类的引用。

                                区别:
                                        A:调用成员变量:
                                                this.成员变量: 即可以调用本类成员变量,也可以调用父类成员变量(本类没有)
                                                super.成员变量:只能调用父类的成员变量

                                        B:调用构造方法:
                                                this( 参数 )        : 调用本类的其他构造
                                                super( 参数 )        : 调用的父类的其他构造

                                        C:调用成员方法:
                                                this.成员方法: 即可以调用本类成员方法,也可以调用父类成员方法(本类没有)
                                                super.成员方法:只能调用父类的成员方法

                构造方法:
                        子类所有的构造方法默认都去访问了父类的 无参构造。
                        为什么?
                                用于子类对象访问父类数据前,对父类数据进行初始化。
                        掌握:
                                所有的类都直接或间接继承自Object类,Object类是所有类的父类。
                                Object类中只有一个无参构造。

                        如果父类没有无参构造怎么办?
                                第一种方式:
                                        通过 this(参数) 的形式调用本类的其他构造。

                                第二种方式:
                                        通过 super(参数) 的形式调用父类的带参构造。

                        注意事项:
                                super()语句和this()语句必须放在构造方法的第一行。并且这两个语句不能共存。
                                问:super关键字和this关键字,在同一个构造方法中,能不能共存?
                                        可以。
                                       
                        如果子父类都有 静态代码块,构造代码块,构造方法,那么他们六者之间的执行顺序是什么?
                                第一次:
                                        父静,子静,父类的构造代码块,父类的构造方法,子类的构造代码块,子类的构造方法。
                                第二次:
                                        父类的构造代码块,父类的构造方法,子类的构造代码块,子类的构造方法。
                                       

                成员方法:
                        方法重写:子类出现和父类一模一样的方法时,称为方法重写。
                                          注意:返回值类型也必须完全一样(或者有子父类关系)。

                        什么时候使用方法重写?
                                当子类需要使用父类的功能,并且功能主体又有自己特有功能的时候,就可以考虑使用方法重写。
                                (大白话:想使用父类的内容,并且还想加入自己的内容,就考虑使用方法重写)

                        注意事项:
                                1、父类的私有方法不能被子类重写。
                                2、子类重写的时候,方法的访问权限不能低于父类方法的访问权限。
                                        权限修饰符:
                                                (从小到大) private --> 默认 --> protected        --> public

                                3、父类的静态方法不能被子类的非静态重写。
                                   静态只能覆盖静态(严格来讲,算不上重写)。

                        面试题:
                                方法重写Override和方法重载Overload有什么区别?
                                        方法重写Override:
                                                子类出现和父类一模一样的方法时,称为方法重写,返回值类型也必须完全一样(或者有子父类关系

                                        方法重载Overload:
                                                同一个类中,出现方法名相同,参数列表不同(个数,对应的类型)的两个或两个以上的方法时称为方法重载,方法重载与返回值的数据类型无关。

final关键字:
        概述:最终的意思,是一个关键字,可以修饰类,变量,方法。
                修饰类:不能被继承,但是可以继承其他类。
                修饰变量:其实是一个常量。
                        一般和public static共用。
                        问:public static final 他们三者之间有无顺序关系?
                                没有顺序关系,但是一般写成:public static final
                修饰方法:不能被子类重写。


        修饰局部变量:
                基本类型:值不能改变。
                引用类型:地址值不能改变,但是对象的属性值可以改变。


        修饰变量的初始化时机:
                1、显示初始化。
                2、通过构造方法进行初始化。
                        (在对象构造完毕前进行初始化即可)
       




final class Animal extends Object {
        public final void show() {
                System.out.println("这个是绝密文件,不能动");
        }
}

class Cat extends Animal {
        public void show() {
                System.out.println("这是一坨shit");
        }
       
}

Cat c = new Cat();                               
Cat c = new Cat("加菲猫",3);
//总结:实际开发中,子类的空参去访问父类的空参,子类的带参去访问父类的带参





0 个回复

您需要登录后才可以回帖 登录 | 加入黑马