七.抽象类
当我们在做子类共性功能抽取时,有些方法在父类中并没有具体的体现,这个时候就需要抽象类。
在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类!
抽象类必须要用abstract 关键字修饰。
//Animal2就是一个抽象类,shout是它的抽象方法,都需要abstract修饰 public abstract class Animal2 { abstract void shout(); }
-
抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
-
抽象类不能实例化
-
抽象类可以有构造方法
-
抽象类的子类
要么重写抽象类中的所有抽象方法
要么是抽象类
//Cat2和Dog2就继承了Animal2类,并且重写了抽象方法 class Cat2 extends Animal2 { public void shout() { System.out.println("猫会喵喵叫"); } } class Dog2 extends Animal2{ public void shout(){ System.out.println("狗会汪汪叫"); } }//测试类
class TestA{ public static void main(String[] args) { Cat2 a1 = new Cat2(); a1.shout(); Dog2 a2 = new Dog2(); a2.shout(); }
八.代码块
在Java中,使用 { } 括起来的代码被称为代码块。
包含:
局部代码块
-
位置: 方法中定义
-
作用: 限定变量的生命周期,及早释放,提高内存利用率
构造代码块
-
位置: 类中方法外定义
-
特点: 每次构造方法执行的时,都会执行该代码块中的代码,并且在构造方法执行前执行
-
作用: 将多个构造方法中相同的代码,抽取到构造代码块中,提高代码的复用性
静态代码块
-
位置: 类中方法外定义
-
特点: 需要通过static关键字修饰,随着类的加载而加载,并且只执行一次
-
作用: 在类加载的时候做一些数据初始化的操作
九.接口
-
接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用。
-
Java中接口存在的两个意义
-
用来定义规范
-
用来做功能的拓展
-
接口用关键字interface修饰
类实现接口用implements表示
-
接口不能实例化
我们可以创建接口的实现类对象使用
-
接口的子类
要么重写接口中的所有抽象方法
要么子类也是抽象类
十.多态
同一个对象,在不同时刻表现出来的不同形态
-
多态的前提
-
要有继承或实现关系
-
要有方法的重写
-
要有父类引用指向子类对象
-
-
成员访问特点
-
成员变量
编译看父类,运行看父类
-
成员方法
编译看父类,运行看子类
-
-
好处
提高程序的扩展性。定义方法时候,使用父类型作为参数,在使用的时候,使用具体的子类型参与操作
-
弊端
不能使用子类的特有成员,必须经过转型才能使用。
多态转型
-
向上转型
父类引用指向子类对象就是向上转型
-
向下转型
格式:子类型 对象名 = (子类型)父类引用;