概念
把多个类中相同的成员抽取出来放在一个类中,再使用extends关键字使他们产生联系
好处
1) 提高了代码的可重用性
2) 在升级代码时,不用重复书写以前的代码
坏处
1) 增加了类和类之间的耦合
程序的设计思路:低耦合,高内聚
耦合:类和类之间的关系
内聚:自己独立解决问题的能力
老师出了一道很难的题,但是你们一定要做出来,怎么办呢?
1. 自己努力做,查资料,直到把它做出来为止
2. 发现同桌好像会,直接问他,或者抄一遍
java中继承的特点
1)单线继承
2)子类可以通过继承得到父类中所有非私有成员,注意构造器无法通过继承获取
3)在构造子类对象时,会先构造父类对象
在使用继承时要注意的地方
1)不要为了部分功能区强行继承
class A{
void a();
void b();
}
class B extends A{
//void b();
void c();
}
2)继承必须体现一种特殊与一般的关系 is-a
class Worker extends Person
//体现了 Worker is a Person
class Pig{
void eat();
}
class Student extends Pig{
}
3) 构造子类对象时,会默认调用父类的无参构造
* 方法重写、方法覆盖、Override(重点)
在子类中写一个和父类同名同参数列表的方法,然后修改方法的实现过程
代码规范:重写的方法必须加上@Override 注解
** 方法重载:在同一个类中可以有多个同名不同参数的方法
成员属性的寻找顺序:
本类中寻找 -> 父类中寻找 -> 父类的父类 -> ...
使用父类中的成员属性或方法,通过super.
面试题:解释重载与覆写的区别(解释overloading与overrid的区别)
NO |
区别 |
重载 |
覆写 |
1 |
英文单词 |
Overloading |
Override |
2 |
发生范围 |
发生在一个类里面 |
发生在继承关系中 |
3 |
定义 |
方法名相同,参数类型个数不同 |
方法名相同,参数类型,个数相同,方法的返回值相同 |
4 |
权限 |
没有权限的限制 |
被覆写的方法不能拥有比父类更为严格的访问控制权限 |
在使用overloading的时候返回值能否不同?
在发生重载关系的时候,返回值可以不同,但是考虑到程序设计的统一性,重载时尽量保证方法的返回值类型相同。
** 继承中的初始化顺序
1. 加载类的顺序
先加载父类,再加载子类
加载静态代码块和静态属性,加载顺序是它们的定义顺序
2. 初始化对象
对象的构造顺序
先构造父类对象,再构造子类对象
初始化成员属性和构造块,初始化顺序是它们的定义顺序,最后执行构造器
class A{
}
class B extends A{
}
class C extends B{
}
加载类时,先A的静态块和静态属性,再B的静态块和静态属性,再C的静态块和静态属性
初始化对象时,先A的成员属性和构造块,再A的构造器;然后是B的成员属性和构造块,再B的构造器;
最后C的成员属性和构造块,然后C的构造器