继承由来是什么:当我们在定义若干个类的时候,发现某一些类中具有相同的属性和行为
那么,我们就可以将这些相同的部分进行抽取,独立生成另外一个类,那么这个生成出来
的类我们称之为是父类,其他的被抽取内容的类称之为子类。
- 子类与父类之间就是所谓的继承关系 用 extends来表示
- 那么在现实生活中,父与子之间的一对多 还是多对多的关系?
- 所以 在Java当中 继承是单继承(一个子类只能有一个父类,但是一个父类可以有若干个子类)
- 当然,在C++中,继承是多继承的,不太符合实际的社会问题,所以Java更加符合现实编程
- (不代表Java当中就没有多继承的时候!如果是类与类之间 必须是单继承;如果是接口与接口之间,可以是多继承)
- 既然有了继承,那么在Java当中就有了继承体系
- (既然有了父子关系,是不是就产生出了族谱这个东西)
- 先说一点:我们常用的继承体系 异常体系 集合体系 IO体系 网络体系 多线程体系
- C->B->A->?->?->龙的传人/炎黄子孙
- C就是B的儿子,那么A就是C的爷爷
- 在Java继承体系当中,所有类的最终父类都是Object!Object就不存在爸爸了
- 如果我们在定义一个类的时候,没有显著声明父类的时候 那么该类的父类默认是Object
- 注意一点:在分析设计继承的时候 一定要符合社会常识问题
- 子类 和 父类 之间 必须是 is a 关系 子类必须父类的一种 同一系列的
- she is a Girl ; he is a boy ; he is a ladyboy ; 旺财 is a Dog
- 所以,千万不要为了获取某一个类的功能而把这个类叫爸爸!
继承关系特点总结:
Java语言的继承关系:是一种单继承的关系
- 一个子类只能有一个父类,而一个父类可以有多个子类
- 子类可以可以使用父类的属性和方法 ,但是父类不能够访问子类独有的属性和方法
- 创建子类对象时 先执行父类的构造方法 ,然后在执行子类的构造方法
- 使用super关键字 去调用父类的构造方法
super父类的引用 超类的引用 基类的引用 用法和this关键字类似
如果在父类中加入静态代码块 在子类中也加入静态代码块 那么创建子类对象时,它的执行顺序是什么样子的?
执行顺序:
父的静态代码块------子类的静态代码块 -------父类的构造方法 -----子类的构造方法
子父类中成员变量/静态变量的特点:
如果只有子类有且非私有 那么就调用子类的
如果只有父类有且非私有 那么就调用父类的
如果子父类都有且非私有 那么就调用子类的
(成员变量之间 是不存在重写关系的!!!)
子类.属性 顺序:子类对象成员->子类静态->父类成员->父类静态
子类成员函数在内部调用变量时 局部变量->子类对象成员->子类静态->父类成员->父类静态