黑马程序员技术交流社区

标题: 奉上今天的笔记(内容有点多有点乱,听得我都有点晕乎) [打印本页]

作者: Richard926    时间: 2015-4-15 00:13
标题: 奉上今天的笔记(内容有点多有点乱,听得我都有点晕乎)
Day08继承
2015/04/14
[size=10.5000pt]1、继承
把多个类中的相同属性和行为进行抽取,封装到一个类中然后再建立新类的时候就不需要从头做起,继承刚才定义的那个类即可。
格式:
class A extend B                //A类是子类,B类是父类。
注意:
A:子类可以直接直接访问父类中的非私有的属性成员(成员变量和成员方法)。也就是说子类具有了父类中非私有的所有属性。
B:不要为了获取某个类的部分功能而定义继承关系,要遵循is a 的关系
特点:
Ajava只支持单继承,不支持多继承;因为如果可以多继承就回出现调用不明确问题。
Bjava支持多层(重)继承(继承体系)。
好处:
A提高了代码的复用性;
B让类与类之间产生了一个关系,是多态的前提
什么时候把类的关系定义成继承关系呢?
由于继承体现了一种关系 is a 的关系,以后在定义类的时候(AB),如果A is  ahas a //雁群中has a 大雁/use aB的一种,或者B is a A,那么他们之间就存在继承关系。前者A是子类,后者B是子类。
[size=10.5000pt]2、子父类的成员变量的关系
通过子类访问一个成员变量的时候:
A:先在局部范围内找,如果有就用;
B:再在成员变量位置找,如果有就用;
C:再在父类成员变量位置找,如果有就用;
D:如果找不到就报错。
现在要在子类中输出局部范围的值,输出成员范围
A:局部范围的值,直接输出变量名即可;
B:成员范围的值,输出this.变量名        //如果在本类中没有找到就去父类找
C:父类的成员变量 输出super.变量名即可。        //super就是跳过本类去父类找成员变量
[size=10.5000pt]3、Super
this的用法很像,super代表的是父类的内存空间的标示。(可以理解为父类的对象引用)
Thissuper的使用:
成员变量:
This.变量 --- 当前类的变量
Super.变量 ---父类的变量
构造方法:用在构造方法
成员方法:
This.方法名()---本类的方法
Super.方法名()---父类的方法
[size=10.5000pt]4、方法的重写(覆盖)
子类中出现和父类中一模一样的方法时会出现覆盖操作,也叫做方法的重写        //原因是先调用本类的方法再调用父类中的。
方法重写和方法重载的区别:
方法重写:子父类中,出现方法相同的情况。返回值类型、方法名、参数列表都相同
方法重载:同一个类中,方法名相同,参数列表不同。
方法声明:返回值类型、方法名、参数列表、修饰符
方法签名:方法名、参数列表
注意事项:
A:父类中的私有方法不可以被重写;
B:重写时子类方法的访问权限一定要大于等于父类方法访问权限;
C:静态的方法只能被静态方法重写。这个其实不能算是对象的关系。
D:在子类覆盖方法中,继续使用被覆盖的方法可以通过super.函数名获取
重写的应用:
A:当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样即沿袭了父类的功能又定义了子类特有的内容。用super.方法名()来调用。
B:父类的功能过时需要重新写入。
[size=10.5000pt]5、继承中的构造方法问题
子类的构造方法实例化时会默认都去访问父类的无参构造方法,因为在子类中的构造方法都有一条默认语句super()。
因为子类会自动具备父类中的非私有化数据,那么这个数据初始化要靠父类完成,所以会去先调用父类的构造方法对数据进行初始化。
注意:如果父类中没有无参构造方法(有带参构造),那该怎么办呢?
A:可以通过super(参数)去访问父类中的带参构造方法;
B:可以通过this(参数···)
构造方法不能进行方法重写。
[size=10.5000pt]6、继承中代码块的执行顺序
一个类中有静态代码块、构造代码块和构造方法,那么运行顺序是静态代码块 ——> 构造代码块——>构造方法,而且静态代码块只执行一次(因为类只执行一次)。

[size=10.5000pt]7、Final关键字
很多时候,父类中的有些内容是不能被子类重写的。然而只要方法声明相同,子类就可以重写父类方法。这样父类的方法就不安全。针对这种情况,就需要做一个标记,那么这个方法就可以不被重写了。
final可以修饰成员类、成员方法、成员变量。
特点:
它修饰的成员方法不可以被重写;
它修饰的类是不能被继承的。
它修饰的成员变量其实就是一个常量,不能重新赋值但是它的值是可以改变的。


作者: yxnheima    时间: 2015-4-15 20:23
非常好,不错哦!
作者: Richard926    时间: 2015-4-15 21:58
yxnheima 发表于 2015-4-15 20:23
非常好,不错哦!

还好了····
作者: Richard926    时间: 2015-4-15 22:01
显示的有点问题,大家将就的看哈
作者: 郑卫原    时间: 2015-4-15 22:08
class 类A extends 类B   
作者: lclxjzz    时间: 2015-4-15 22:21
学习了···········
作者: Richard926    时间: 2015-4-15 22:26
郑卫原 发表于 2015-4-15 22:08
class 类A extends 类B

多头,少了一个s ,谢谢纠出错误:lol
作者: shw16888    时间: 2015-4-15 22:31
很好!!!
作者: yxnheima    时间: 2015-4-16 18:27
会非常好啊!
作者: zhuchangbao    时间: 2015-4-16 18:47
貌似是java基础啊。加油奥。还有很长的路要走~
作者: Richard926    时间: 2015-4-16 22:07
zhuchangbao 发表于 2015-4-16 18:47
貌似是java基础啊。加油奥。还有很长的路要走~

恩,路还长!




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