day08【面向对象基础–中】续
抽象类
语法格式
- 抽象方法 : 没有方法体的方法。
- 抽象类:被abstract所修饰的类。
【权限修饰符】 abstract class 类名{
}
【权限修饰符】 abstract class 类名 extends 父类{
}
abstract关键字
abstract关键字可以修饰类,一个类加上了abstract就变成了抽象类。
抽象的类中可以包含抽象的方法,也可以包含普通的方法。
抽象的类不能被实例化。
//抽象的方法没有方法体。抽象的方法必须在抽象的类里
//一个类如果继承自抽象父类,那么它必须重写父类中所有的抽象方法。
多态
多态:任何一个需要父类引用的位置,都可以传递一个子类对象。
实现多态的关键步骤:
- 必须有继承和父子类。
- 必须父类定义方法,子类重写方法。
- 必须是父类的引用,子类的对象。
// =左侧我们称其为编译时类型,=右侧我们称其为运行时类型。
Teacher tea = new LangTeacher();
// tea.langSong();// 在多态状态下,只能访问父类中的方法,子类独有的方法是无法访问。
// 多态状态下调用方法是看编译时类型,编译时类型有的就可以调用编译时没有的就不能调用。
// 方法运行看运行时类型,所以运行时是靠子类的方法工作。
// 如果在多态状态下想调用子类独有的方法,使用父类的引用类型是不能调用的(因为看不见)
// 想要看见子类独有的方法,就必须将编译时类型也变成子类类型。
instanceof关键字
instanceof关键字 的左侧一定是一个对象,关键字的右侧一定是一个类,如果左侧的这个对象实际上是右侧这个类的对象则返回true,否则返回false。
强制类型转换的时候会产生一个类转换异常,所以一定注意,对象原本是什么类型它才能转成什么类型。
代码块
// 直接写的{}叫普通代码块,加了static{}的叫静态代码块,无论是哪种都会在创建对象的时候被调用
// static的优先于普通的,所以static代码块会早于普通代码块执行,普通代码块会早于构造方法执行,构造方法最后。
// static的和普通的代码块都可以写多个,但是调用的时候按照写在上面的先执行写在下面的后执行来排列顺序。
final关键字
// final关键字可以修饰类,类的成员,局部变量,参数。
// final修饰类:类不能被继承,final修饰属性:属性就变成了常量。常量必须在声明的同时赋值,且这个值将不再改变
// final修饰局部变量:变量变成常量。final修饰方法:方法不能被重写。
// final修饰参数:参数的值在方法内部只能被使用,不能被修改。
运行顺序
// 在创建子类对象的时候,同时会创建一个父类对象
// 先静态再普通,先父类再子类