面向对象的特征二:继承性
一.为什么要有继承性、继承性的好处?
1.减少代码冗余,提高代码复用性
2.便于功能的拓展
3.为多态的使用,提供基础
二.继承性的格式: class A extends B{}
A:子类、派生类 subclass
B:父类、基类、superclass
2.1体现:一旦子类A继承父类之后,子类A中就获取了父类声明的所有的属性、方法
特别的父类中声明为Private的属性或方法,子类继承父类之后,仍然认为获取了父类私有的结构
只是因为封装性的影响,使得子类不能直接调用父类的结构
2.2 子类继承父类之后,还可以声明自己特有的属性和方法,实现功能的拓展
extends:延展、拓展
三.java中有关继承的规定
1.一个类可以被多个子类继承。
2.java中类的单继承性:一个类只能有一个父类
3.类可以多层继承
4.子类直接继承的父类 称为直接父类。间接继承的父类称为简介父类
5.子类继承父类后,就获取了直接父类和所有间接父类中声明的属性和方法
四.1.所有的java类除了Object类外,都直接或间接继承于Object类
2.所有的java类具有Object类声明的功能
四.方法的重写/覆盖
父类的某方法不是特别适合子类
1.重写:子类继承父类之后,可以对父类同名同参数的方法,进行覆盖操作
2.重写:重写以后,当创建子类对象以后,通过子类对象调用父类的同名同参数的方法,
实际执行的是子类重写父类的方法
3.重写的规定
方法的声明: 权限修饰符 返回值类型 方法名(形参){
//方法体 }
子类重写的方法名和形参列表与父类被重写的方法名和形参列表相同
子类重写的方法权限修饰符不小于父类被重写方法的权限修饰符
特殊情况,子类不能重写父类中声明为private权限的方法
返回值类型:
父类被重写的返回值类型是void,则子类重写的方法的返回值类型只能是void
父类被重写的返回值类型是A类,则子类重写的方法的返回值类型只能是A类或A类的子类
父类被重写的返回值类型是基本数据类型,则子类重写的方法的返回值类型只能是相同的基本数据类型
方法体是不同的,如果是相同的,那么就没必要再重写
子类重写的方法抛出异常类型不大于父类被重写的异常类型
子类和父类中同名同方法都声明为static才考虑重写
五.super关键字的使用
1.super理解为:父类的
2.super可以调用:属性、方法、构造器
3.super的使用:调用属性和方法
3.1我们在子类的方法或构造器中,通过使用"super.属性"或"super.方法"的方式,显式调用父类中声明的属性或方法,通常情况下,习惯省略"super"
3.2特殊情况:当子类重写了父类中的方法以后,我们想在子类方法调用父类被重写的方法,必须用"super.方法",表面调用的是父类的方法
4.super调用构造器
4.1 在子类构造器中显式的使用"super(形参列表)"的方式,调用父类的构造器
4.2"super(形参列表)"的使用,必须生命在子类构造器的首行
4.3我们在类的构造器中,针对"this(形参列表)"或"super(形参列表)"只能2选1
4.4首行没写"this(形参列表)"或"super(形参列表)",默认使用"super(形参列表)"
4.5在类的多个构造器中,至少有一个类的构造器使用了"super(形参列表)"
面向对象之三:多态性
何为多态性:
对象的多态性:父类的引用指向子类的对象(或子类的对象赋值给父类的引用)
多态的使用:虚拟方法调用
有了对象多态性以后,我们在编译期,只能调用父类声明的方法,但在执行期实际执行的是子类重写父类的方法
多态性的使用前提:
① 类的继承关系
② 方法的重写
对象的多态性:只适用于方法,不适用于属性(编译和运行都看左边)
------------------------------------------------------------------------------------------------
面试点
1.5.1.8强制类型转换
2.抽象类和接口的共同点和不同点?
3.Object类是所有类的父类
Object类中方法的作用
equals方法什么意思?在Object中定义的equals是比较两个对象的地址是否是同一个
特殊的String重写了equals方法,比较的是String的值、实体内容
==号
如果比较的是基本数据类型变量:比较两个变量保存的数据是否相等。(不一定类型要相同)
如果比较的是引用数据类型变量:比较两个对象的地址值是否相同,即两个引用是否指向同一个对象实体
------------------------------------------------------------------------------------------------------
如果重写equals需要注意什么?
如果重写equals方法的话一定要重写hashCode方法
为什么重写equals方法的话一定要重写hashCode方法?
因为在使用hashmap要 equals和hashCode合作
hashmap中他们两个是怎样合作的?
hashmap中key值判断相等需要用到equals()
hashmap中存储的时候需要用到hashcode()
key一样的对象会根据hashcode分配到同一个桶中
------------------------------------------------------------------------------------------
wait() 是让当前线程进入等待队列
notify()唤醒线程
----------------------------------------------------------------------------------------
面试点hashCode
散列码( hash code ) 是由对象导出的一个整型值。散列码是没有规律的。如果 x 和 y 是两个不同的对象, x.hashCode( ) 与 y.hashCode( ) 基本上不会相同。
如果两个对象的hashCode不同,那么他们一定是两个不同的对象
如果两个对象的hashCode一定不同,这句话错误
---------------------------------------------------------------------------------------
5.4
什么是自动装箱 自动拆箱?
基本类型转包装类称为装箱
包装类型转基本类型成为拆箱
--------------------------------------------------------------------------------------------
final关键字的作用
1.final关键字修饰类 被final修饰的类不可以被继承
2.final关键字修饰方法 当一个类的方法被final关键字修饰后,这个类的子类将不能重写该方法
3.final修饰变量 final修饰的变量成为常量,它只能被赋值一次,一旦被赋值,其值不能再修改
-------------------------------------------------------------------------------------------------
什么是128方法?
在-128--127中间输出为true 超出就位false
为了节省内存在这个范围内会出现一个自己的常量池 指向一个地址所以会true超出范围 变为false
使用intValue()进行比较 拆箱比较