目标:
理解继承的概念;
掌握java中继承的实现方式;
理解方法重写;
理解最终类和最终方法;
★ 开闭原则:
父类(基类、超类):1):共有属性、2):共有行为;
↑
子类(派生类):1):有特定属性、2)有特定行为;
指向方向永远是:子类指向父类
★ 关键字:extends(继承、扩展)
”public class XXXXX extends XXXXX(){”
↑ ↑
子类类名 父类类名
类与类的关系(判断具有继承关系)
1:hos-a (组合): 拥有; 2:is-a (继承):是一个;
单继承与多继承:
在java中不允许子类有多个父类;
在java继承都是单继承:
一个子类只能有一个父类;
单继承:优点:类层次结构清晰;缺点:丰富度没有多继承的好;
(单继承通过接口来弥补丰富度不够的问题)
★ 默认父类:Object (来自 java,JDK,API)
方法名:共9个方法:先介绍:equals、toString、finalize
finalize:在Object方法,用于GC垃圾回收程序调用,用于销毁对象(不用程序员调用)
toString:通过方法名见名知意,返回一个类一个对象(字符串)的描述;
打印对象、或对对象进行字符串操作的时候就是在调用toString;而来自Object返回:全类名 @ 引用的16为进制类(例“com.lovo.bean.XXXX@11010001” 类的限定名或类全称);
根据子机的需要重写toString;默认情况下来自Object;
equals:
辨析:1)equals:判断两个对象在业务上是否相等;
2)“==”:判断左右两边两个类返的值相同,假如两边是引用类型,但不能判断两边内容; (判断两个引用是否指向同一个对象)
方法重写:
子类将父类的行为重新实现一次,就是方法的重写;
只是实现部分变一个; 方法名:父类要与子类一样;
继承
1:类与类之间的 is-a关系:
父类(基类、超类):1):共有属性、2):共有行为;
↑(通过extends实现)
子类(派生类):1):有特定属性、2)有特定行为;
1):父类所拥有的属性、行为,子类自动具备:(1):父类设计时考虑共有,子类设计时考虑特有;(2):java单继承:优:内层清晰;缺:丰富度不够;
2):构造方法不能被继承:(1):语法原因;(2):含义原因;
2:Object → 所有类与数组的根类 → 共9个重要方法:先介绍:equals、toString、finalize
3:方法重写:
1:方法名必须保持一致;
2:参数列表必须保持一致;
3:返回类型必须保持一致;
4:访问修饰符必须大于等于父类: private、public;
5:子类重写后的方法不能抛出比父类重写前的方法更多的异常;
辨析:方法重写:子类在父类继承的方法重新实现一次;
方法重载:在同一个类中,拥有多个同名方法,参数列表不同,各有各的实现;
4:构造方法:
构造方法不能被继承:子类不能修改或控制父类;
5:内存:
内存叠加:先调用父类构造,产生父类对象部分,在调用子类构造,产生子类对象部分,叠加在一起构成一个完整的子类对象;
先调用父类属性,在叠加子类属性;
6:辨析:
this(指本类):
this. 此时代表了当前对象;能操作定义在本类上的属性和方法;能操作定义在父类上的被访问修饰符允许访问的属性方法;
this( ) 表示调用本类的其它构造,只能写在构造方法中,只能写在构造方法的第一句;
super(指父类):
super. 此时代表当前对象的父类对象部分,不能操作定义在本类上的属性和方法,能操作定义在父类上的被访问修饰符,允许属性和方法,只有当在本类中调用被重写方法,重写钱的效果是,才调用super(调父类);
supre( )调用父类指定的构造方法,只能写在构造方法中;只能写在构造方法的第一句;supre( )不写会有默认,调用父类的公共无参构造;
7:final关键字:(不能变)
当用final修饰一个类,这个类不能被继承,称为最终类,终态类;
“public final class xxxx extends xxxx( ){" 可以修饰变量;
↑ 可以修饰方法;
不可在继承 可以修饰类;
这种类是不能产生子类;
方法用final修饰就表示该方法不能被重写
”public final void methodA(){“