黑马程序员技术交流社区

标题: 继承+代码块 [打印本页]

作者: 磊子    时间: 2015-9-11 23:48
标题: 继承+代码块
代码块:
        概述:
        分类:
                局部代码块:
                        方法中。
                        让变量尽可能早的从内存中释放,调高效率。
                构造代码块:
                        类中,方法外。
                        一般它里边存储的都是多个构造方法的同性内容,每次执行构造方法前都会执行。
                        并且是优先于构造方法执行的。
                静态代码块:
                        定义在类中,方法外,用static修饰。
                        类文件(.class字节码文件)加载一次的情况下,静态代码块只执行一次。
                        静态代码块是优先于main方法执行的。(静态代码块和main方法在同一个类中)
                        对类进行初始化,一般是用来加载驱动的。
                同步代码块:synchronized

        class Student{
                //成员变量
                //静态代码块
                //构造代码块
                //构造方法
                //set,get
                //成员方法
        }


继承:
        概述:让类与类之间产生一个关系(子父类关系),通过extends。
        class A extends B{
       
        }
        叫法:
                类A:子类,派生类
                类B:父类,基类,超类

        继承的好处和缺点:
                好处:
                        1、复用性。
                        2、维护性。
                        3、类与类之间产生关系,是多态的前提。
                弊端:
                        耦合性增强了。
                开发原则:高内聚,低耦合。
        Java中类的继承的特点:
                1、Java中只支持单继承,不支持多继承。
                2、Java支持多层继承。
        如何学习(使用)一个继承体系:
                看顶层,用底层。
                顶层:因为顶层的类封装的都是整个继承体系的一些同性内容。
                底层:顶层才是具体的实现类。

        什么时候使用继承?
                因为继承体现的是一个“is a”的关系,所以我可以采用假设法,
                比如说:类A是类B的一种,或者说:类B是类A的一种。
                前者:类A是子类,后者,类B是子类。

        使用继承的时候有哪些注意事项?
                1、子类只能继承父类的非私有成员(成员变量,成员方法)
                2、子类不能继承父类的构造方法,但是可以通过super关键字来调用父类的构造方法。
                3、不要为了获取部分功能,而去使用继承。(程序员都是项目经理他爹)

        继承中子父类间的成员关系:
                成员变量:
                        “就近原则”。
                       
                构造方法:
                        this:代表(本类)当前对象的引用。
                        super:代表当前对象父类的引用。(super代表的是父类的内存空间标示)
                                为什么子类的构造方法前默认都有一行super()去调用父类的无参构造?
                                        用于子类对象访问父类数据前,对父类数据进行初始化,并没有创建父类对象。

                        每一个构造方法的第一行代码默认都是:super();  为什么呢?
                                因为子类继承类父类,就有可能来使用父类中的数据,
                                所以在初始化子类的数据前,必须先对父类中的数据进行初始化。

                        所有的类都直接或间接继承自Object类。Object类中只有一个空参构造。

                        父类没有空参构造怎么办?
                                1、super(参数)  来调用父类的带参构造。
                                2、this(参数)   来调用本类的其他构造。
                                注意:super()或者this()语句必须出现在构造方法的第一行。

                        this和super能同时出现在构造方法中吗?

                成员方法:
                        方法重写Override:子父类间,子类中出现和父类完全一样的方法。(返回值的数据类型也必须一样)
                        方法重载Overload:同一个类中,出现方法名相同,参数列表不同的情况。 与返回值的数据类型无关。

                        什么时候使用方法重写?
                                当子类需要继承父类的功能,而功能主体上又有自己的特有功能的时候,就可以考虑使用方法重写。

                        注意事项:
                                1、父类的私有成员方法不能被子类重写。
                                2、重写的时候,子类方法的访问权限必须大于等于父类方法的访问权限。
                                3、静态只能覆盖静态。
               
学生和老师案例:
        属性:姓名,年龄
        行为:吃饭
        老师有特有的方法:讲课
        学会有特有的方法:学习

class Test_Person{
        public static void main(String[] args){
        }
}
class Person{
        //属性:姓名,年龄
        //空参,带参
        //set,get
        //成员方法:eat
}
class Teacher extends Person{
        //空参,带参
        //讲课:teach();
}
class Student extends Person{
        //空参,带参
        //学习:study();
}


猫狗案例继承版
        属性:毛的颜色,腿的个数
        行为:吃饭
        猫特有的行为:抓老鼠catchMouse
        狗特有的行为:看家lookHome

class Animal{
        //属性:毛的颜色,腿的个数
        private String color;
        private int leg;

        //空参,带参

        //set,get

        //成员方法:eat

}
class Cat extends Animal{
        //空参,带参

        //抓老鼠:catchMouse();
}
class Dog extends Animal{
        //空参,带参

        //看家:lookHome();
}

               


final:
        它是是最终的意思,是一个关键字,可以用来修饰类,变量,和方法。
        它修饰的类不能被继承。
        它修饰的方法不能被重写。
        它修饰的变量是一个常量,一般与public static共用。
        public static final int MAX_VALUE = 0;

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

        final修饰变量的初始化时机:
                1、显示初始化   开发中用到的比较多的。
                2、在对象构造完毕前初始化即可。


作者: zzq18217362451    时间: 2015-9-12 00:14
整理的这么详细
作者: xiaoxiao147    时间: 2015-9-12 00:17
很详细,来学习一下




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2