黑马程序员技术交流社区
标题:
继承+代码块
[打印本页]
作者:
磊子
时间:
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