黑马程序员 第八天笔记
<a href="http://www.itheima.com" target="blank">java培训</a>
1.继承概述
前提:多各类中,属性和方法一样
造成重复太多,代码冗余
将重复的东西取出来,形成看一个类。这个类叫做其他各个类的父类,其他各个类叫做这个类的子类。
代码演示:
演示结果:
2.继承好处:
提高代码的复用性,代码量减少,提高代码的可维护性
继承的出现,让类与类之间产生关系,正式有个这个关系,为多态的出现的做了准备
3.JAVA中继承的特点
JAVA支持单继承,不支持多继承
一个类,只能继承一个类,不能同时继承多个类。但是,支持多层继承,或者叫做多重继承
class A{}
class B extends A{}
class C extends B{}
A类是B的父类,B是C的父类,C是A的孙子类
C可以直接使用A和B的成员,不包括私有
B可以直接使用A的成员,不包括私有
A可以直接使用自己的成员,包括私有
4.什么时候使用继承
到底什么时候需要使用继承
具体情况具体分析:当你分析程序的时候,先要分析程序中确实存在具体事物, 找谁是谁的一种,如果一个事物是另一事物中的一种,可以继承
如果一个事物的具备了另一个事物的一部分,而另一部分不具备的时候,继承无效,不能继承
5.继承后,子类父类之间成员变量的特点
A.如果子类有,使用子类的成员变量,否则使用父类的
B.父类,子类,子类方法,出现了同名变量
B.1如果子类方法有变量,就近访问
B. 2子类方法中,自己访问成员变量,用this
B.3子类使用父类的成员变量,使用super关键字
6.super关键字
This代表本类对象的引用
Super代表父类存储空间的标识(心里理解为父亲对象引用)
代码演示:
演示结果:
子类父类内存图
注意:父类先进内存,子类再进内存,会在子类的空间中做上一个super的标识,标明父类的内存位置
7.继承以后,子类父类构造方法的特点
A.在建立子类对象的时候,无论如何必须运行父类构造方法
A.1在子类构造方法的第一行,有一个隐士代码: super()作用调用父类空参数构造方法
A.2如果子类不写构造方法,编译的时候加上构造方法
编译时期加入构造方法
权限 构造方法名(){
super(); }
A.3 JAVA中所有类的所有构造方法第一行默认是super()
构造方法,重载也算
B.如果父类中没有空参数构造方法,父类中自己手写了构造方法
B.1 子类的所有构造方法,必须手写super,否则便编译失败
B.2如果父类中有多个构造方法,子类可以任意选择一个构造方法调用
C. 子类构造方法中,this和super语句的特性
C.1 子类构造方法中,this还是super选择一个
C.2 子类构造方法写了this语句,默认的super语句就没有了
C.3 子类构造方法,写this语句,会通过别的构造方法,间接访问到父类构造方法
总结特点:
记住所有类构造方法第一行都是super()!!!
程序中,必须保证子类中所有的构造方法无论直接还是间接,都必须访问过父类的构造方法。
子类父类构造方法的题目:看子类中所有构造方法是不是都访问过父类构造方法,
如果没有,直接编译失败
代码演示:
演示结果:
8. 子类父类中成员方法特点(非常重要,后期,经常出现了)
继承中,子类出现了和父类一模一样的方法,这样的现象,称为 子类重写父类的方法,前提是权限必须大于或者等于父类方法权限 (override) 现象还叫做,子类覆盖父类方
法,重写,复写 。
正在尝试分配更低的访问权限; 以前为public : 子类方法权限小于了父类方法权限
返回类型int与void不兼容 : 重写的时候,子类方法返回值和父类方法返回值不同
静态方法:
静态覆盖静态,非静态覆盖非静态
静态方法,属于自己的类,不属于对象,因此静态没有覆盖的说法
9.重写方法
extends 继承,实际英文 扩展,延伸
class Zi extends Fu{}
子类扩展的了父类的功能
代码演示:
演示结果:
10. 学生和老师继承练习
学生姓名,年龄
老师姓名,年龄
学生功能,学习功能
老师功能,上课功能
要求:共性抽取父类,父类成员私有,提高get set
在学生和老师的功能中,打印出自己的姓名和年龄
代码结果:
结果演示:
11.Final关键字
final是最终的意思,修饰符,修饰类,方法,成员变量,局部变量
final修饰类--最终类,不能有子类,不能被继承
final修饰方法-- 最终方法,这个方法不能被子类重写
子类继承后,可以调用,但是不能重写
final修饰的成员变量--最终变量,只能赋值一次,终身不变,就是常量
final修饰成员变量,固定的数值,不是内存默认值
final修饰成员变量,可以在构造方法中赋值,但是不能在普通的方法中赋值
原因:构造方法是建立对象的过程,普通方法是对象已经建立完成了, 日后在类中,如果定义静态的常量的使用
标准格式 public static final int A = 10;
public static final double PI = 3.14159265358979323846;
代码演示:
演示结果: