java学习第八天内容总结:
学习内容:
总结:
1、继承:extends → 拓展
作用:
1) 解决代码重复问题。
2)表示出一个体系。
┌ 单继承。只能有一个直接父类。(不允许多继承)
Java ├
└多重继承。A ← B ←BB
Object类是Java语言的根类。(任何类都是Object的子类)
一般:开发工程中先编写多个自定义类,发现共同代码,抽取出一个父类。
以后开发中,基于框架/组件继续开发。定义新的类去继承于框架/组件中提供的父类。
注:父类的构造器,子类不能继承,因为构造器必须和当前类名相同。
2、Override
作用:
解决父类某一行为不符合子类具体特征,子类重新定义父类的方法,并重写方法体。
原则:
1)继承才有方法覆盖,不存在字段覆盖概念。
2)异常类型、返回类型,其子类更具体。
3)访问权限,其父类更具体。
判断是否是覆盖方法的必杀技:@Override标签。若未覆盖编译出错。
区别:
Overload:解决同一个类中,相同功能方法。
Override:解决子类继承父类,重写子类具体特征方法。
3、super关键字 → 先有父类,再有子类。
区别:
this:当前对象。
super:当前对象的父类对象。
注:
1)如果父类不存在可以被子类访问的构造器,则不能存在子类。(一般不存在)
2)如果父类没有提供无参构造器,此时子类必须显示通过super语句去调用父类带参数的构造器。
应用:
1)子类方法中,调用父类被覆盖的方法,必须使用super。
2)子类构造器中,调用父类构造器必须使用super。格式:super([实参]);
遮蔽:
1)满足继承访问权限,隐藏父类静态方法。
子类定义的静态方法签名和父类静态方法签名相同。
2)满足继承访问权限,隐藏父类字段。
子类定义的字段和父类字段名相同,只能通过super访问被隐藏的字段。
3)隐藏本类字段
本类中,某局部变量名和字段名相同,只能通过this访问被隐藏的本类字段。
注:
static不能和super以及this共存。
遮蔽不叫覆盖。
4、Object对象
对象:存在堆空间。
常见方法:
1) Protected void finalize();
垃圾回收器,回收对象时调用。(开发不直接使用)
2) Class <?> getClass();
返回当前对象的真实类型。(父类或子类类型)
3) int hashCode();
返回该对象的哈希码值,hashCode决定了对象哈希表中的存储位置。不同对象hashCode不同。
4) boolean equals(Object obj);
当前对象(this)和参数(obj)做比较。
在Object类中的equals方法,本身和“==”符号相同,都是比较对象的内存地址。
建议:每个类都该覆盖equals方法,不是比较内存地址,而是比较数据内容。
5) String toString();
返回对象的字符串表示。
打印对象 → 底层:打印对象的toString方法。
默认:打印对象十六进制的hashCode值,但更关心对象中存储的数据。
建议:每个类都该覆盖toString方法,返回数据内容。
5、多态
前提:存在继承、实现关系。
区别:
1)继承:类与类。
2)实现:接口与实现类。
特点:把子类对象赋给父类变量,在运行时期会表现出具体的子类特征。
作用:把不同的子类对象,都当做父类类型来看待,可以屏蔽不同于子类对象之间的实现差异,从而写出通用的代码达到通用编程,以适应需求的不断变化。
静态方法的调用只需要类即可。如果使用对象来调用静态方法,其实使用的是对象的编译类型来调用静态方法。
6、instanceof 运算符
判断该对象是否是某一个类的实例。
语法:boolean b = 对象A instanceof 类B;
7、组合关系
作用:解决代码复用问题。
继承关系破坏封装。如果A类是B类的一种特殊情况,应该用继承实现,否则,使用组合方式。
练习1:继承
练习2:override覆盖
练习3:super关键字
练习4:多态
练习5:instanceof运算符
练习6:组合关系