上篇记到继承,这篇记到抽象方法
多态
同种类型的对象,表现为不同的形态。
表现形式
父类类型 对象名称 = 子类名称;
多态的前提:1.有继承关系2.有父类引用指向子类对象3.有方法重写
多态的好处:使用父类型作为参数,可以接受所有子类对象,体现多态的扩展性与便利。
多态调用成员的特点
变量调用:编译看左边,运行也看左边(即使用的左边的变量值)
方法调用:编译看左边,运行看右边
多态的优势 方法中,使用父类型作为参数,可以接收所有子类对象
在多态形式下,右边对象可以实现解耦合,便于扩展和维护
person p = new student();
p.work//业务逻辑发生改变时后续代码无需更改。
多态的弊端:不能调用子类特有的功能
解决方案:变回子类类型
子类 子 = (子类)父;
instanceof关键字
例 if(a instanceof dog)
dog c = (dog) a;
强制类型转换能解决什么问题
可以转换成真正的子类类型,从而调用子类独有功能。
转换类型与真实对象类型不一致会报错。
转换的时候用instanceof关键字进行判断。
包和final
包就是文件夹。用来管理各种不同功能的Java类,方便后期代码维护
使用其它类的规则
使用同一个包中的类时,不需要导包。
使用Java.lang包中的类时,不需要导包。
其它情况都需要导包。如果同时使用两个包中的同名类,需要用全类名(包名,类名)
final关键字
方法:表明该方法是最终方法,不能被重写。
类:表明该类是最终类,不能被继承。
变量:变为常量,只能被赋值一次
final修饰的变量是基本类型:那么变量存储的数据值不能发生改变
final修饰成员变量是引用类型:那么变量存储的地址值不能发生改变,对象内部的可以改变。
权限修饰符:是用来控制一个成员能被访问的范围的。可以修饰成员变量,方法,构造方法,内部类。
作用范围:private<默认(default)<protected<public
代码块:{代码}
1.局部代码块 方法内
2.构造代码块 方法外,类以内
3.静态代码块 格式:static()
静态代码块特点:需要通过static关键字修饰,随着类的加载而加载,并且自动触发,只执行一次。
抽象类和抽象方法
抽象方法: 将共性的行为(方法)抽取到父类之后,由于每一个子类的执行内容不一样,所以,在父类中不能确定具体的方法体,此时该方法就可以定义为抽象方法。
抽象类:如果一个类中存在抽象方法,那么该类就必须声明为抽象类。
抽象方法的定义格式:
public abstract 返回值类型 方法名(参数列表);
抽象类的定义格式:
public abstract class 类名{}
注意事项
抽象类不能实例化
抽象类不一定有抽象方法,由抽象方法的类一定是抽象类,可以有构造方法
抽象类的子类,要么重写抽象方法中的所有抽象方法,要么是抽象类。