面向对象总结 继承、多态、抽象类

1.子类的实例化过程,先有父亲,后有儿子
创建子类对象,一定要创建父类对象,只不过是父类对象存在于子类内部,不能显式的调用而已
调用构造器的的顺序:Object -> 父类的构造器  -> 子类的构造器


2.调用顺序
父类的静态代码块
子类的静态代码块
父类的构造代码块
父类的构造器
子类的构造代码块
子类的构造器


静态代码块只调用一次,而构造代码块与构造方法则是实例化一个对象就调用一次


3.super关键字
可以调用父类的属性与方法,私有的属性需要用到super调用父类的getter访问器来调用
super与this关键字用法基本相同,它们调用的方法,都只能出现在代码的第一行,也就是说,super()与this()不能同时出现在第一行,super()用来调用父类无参的构造器,super(实参)常用来调用父类有参的构造器
super是父类的指针,this是指向子类,在本类中使用
当父类方法被重写时,还想在子类中显式的调用父类的方法,则要用super关键字
super不能单独使用


4.final关键字
final修饰变量时,该变量则为常量,并且声明常量时,必须要赋初值,常量名一般要字母大写,一旦确定值,就不能再改变
final修饰方法时,表示不可以被重写的方法
final修饰类的时候,表示不可被继承的类
final修饰属性时,必须赋值,修饰成员常量也可以在构造方法与构造代码块进行初值,修饰静态常量时,也必须赋值,也可以在静态代码块初始化
pulbic static final 表示全局常量
final修饰成员常量时还有一点需要注意,就是除了必须初始化,并且一初始化值便不能更改,但是修饰引用类型的时候,引用类型的变量确实不能再赋值改变,但是引用类型变量的内容可以改变。 


5.哈希码
其实就是地址的转换码
jam强制规定:内容相同的hashcode一定相同,而hashcode相同,内容不一定相同,可以相同,也可以不同,计算规则:四则运算,31 = 18 + 13 = 30 + 1
hashcode相同,equals不一定相同,equals相同,则hashcode一定相同
默认的toString()方法被调用时,输入内容为:类型@hashcode的十六进制格式,所以toString()方法被调用之前一般要重写,String类已经重写了该方法,直接输出字符串格式的内容。


6.多态:(1)继承(2)重写(3)父类的引用指向子类对象
1)编译看类型,运行看对象
2)当多态发生时,注意隐藏新增方法,只能看见延续方法与重写的方法,新增的方法看不见,不能调用,如调用会编译出错,也就是说新增方法永远不会被调用到
|--延续方法:继承自父类的方法,被子类延续下来使用的方法
|--重写方法:被子类重写的方法,注意一点,重写时,如果父类被重写方法的返回类型是基本类弄或者返回类型为void时,子类重写时,一定要跟父类一模一样,如果返回类型是引用类型时,子类覆盖父类方法时,返回类型必须小于或者等于父类的返回类型,一般情况下,都是一模一样的,所以怕写错时,建议直接复制父类需要被重写的方法的签名与返回类型,再写重写方法的方法体
|--新增方法:子类中独有的方法,父类中不存在而子类中有的方法
3)如果想要调用子类的新增方法,则必须强制转换成子类对象才能调用
4)多态的两种应用
|--1.形参使用多态
|--2.返回类型使用父类型
     工厂设计模式很好的对这两种模式进行了应用,根据需要,返回不同类型的子类对象,然后使用多态的形式(形参多态),进行接收。


小插曲:重写equals(),重写时,首先要判断,是否为同一个对象,如果为同一个对象就不用再比较,直接返回true,如果不是同一个对象,再进行具体的比较。一般情况下epuals() 要重写,重写的时候要明确该方法来自Object类,形参是Object类型的,此处发生了多态,注意要进行类型转换。


7.instanceof关键字(java中关键字都是小写格式)
用来判断一个对象是否为其父类或者该类的一个实例,经常用于强制转换前,使用时,要注意避免类型转换异常 ClassCastException
使用前提:类与类之间存在继承关系


8.抽象类
由关键字abstract修饰的类,抽象类中可以有抽象方法,也可以没有抽象方法,抽象方法也要用abstract关键字来修饰,并且方法括号后用分号结束,不存在方法体,就是用来让子孙类进行重写的,所以一个含有非抽象方法与抽象方法的抽象类,就是 具体 + 规范(强制子类必须实现)的结合。
1)抽象类与具体类组成部分的区别
具体类:属性、常量、具体方法、构造方法
抽象类:属性、常量、具体方法、构造方法、抽象方法
2)抽象类的特点
|--抽象类不能实例化
|--一定存在子类
|--抽象类一定存在构造方法,符合子类创建对象的规则
|--修饰符不能用final与static,因为必有要有子类,而且不需要静态
|--抽象方法一定存在于抽象类中,抽象类中可以没有抽象方法
3)抽象方法的应用
模板模式(钩子模式):模板模式的抽象类中有具体方法与抽象方法,其中的具体方法用来确定框架,不变不的东西,抽象方法即为模板方法,是让子类来重写的,与此 同时, 类中必须还有一个具体方法,此方法是用来做模板的,最后在主方法中由子类对象来调用该模板(延续的具体方法)。说白了一句话,就是框架不变,内容可 变。
具体 + 规范(如是纯规范,则是接口)
4)抽象类与子类
|--具体子类:必须重写所有的(继承链上的)抽象方法,其它具体方法按需重写即可。该具体子类的父类可能是抽象类,并且这个抽象类的父类也是抽象类,具体子类的父类实现了一部分具体子类的父类的父类中的一些抽象方法,这时,子类就可以不再重写其父类的父类中的这部分抽象方法,当然,想重写也可以,按需要重写就行。
|--抽象子类:按需重写即可,没有重写的方法待子孙类重写
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值