多态:同一个类,在不同时刻表现出不同的形态
子类->父类:父类的引用指向子类的对象
例如:
Animal animal = new Cat();
父类->子类:
例如:
Cat cat=(Cat)animal
instanceof运算符:当前父类指向哪一个子类
使用格式:
对象 instanceof 类或接口
父类的对象 instanceof 子类
例如:
animal instanceof Cat
父类的引用指向子类的对象访问成员
只能访问父类成员,父类方法可以被子类修改(覆盖)
抽象abstract:父类不能实例话,父类中需要重写的方法不应该有代码体
格式抽象类:
权限访问修饰符 abstract class 类名
格式抽象方法:
权限访问修饰符 abstract 反返回值类型 方法名();
特点:
抽象方法必须在抽象类中,抽象类中可以有实体方法
抽象类不能直接实例化(抽象类没有具体实例,实例化没有意义)
抽象如何实例化?通过多态的方式,父类的引用指向子类的对象
抽象类的子类要么必须重写抽象类中所有抽象方法,要么是抽象类
抽象类中的成员特点
成员变量
可以有变量,可以有常量
构造方法(不能用来创建对象)
有构造方法但是不能实例化
构造方法用于子类访问父类数据的初始化
成员方法
可以有抽象方法:子类必须重写父类抽象方法
可以有非抽象(实体)方法:提高代码的复用性
接口:
概述
接口就是一种公共的规范标准,只要符合标准,大家都可以使用
Java中的接口更多的体现在了对行为的抽象
定义接口
格式:访问修饰符 interface 接口名{}
范例:public interface AnimalImpl{}
特点:
接口不能实体类被继承,只能被实现
接口之间可以继承,可以单继承和多继承
类实现接口通过implements实现
范例:public class 类名 implements 接口{}
接口不能直接实例化
通过多态的形式:接口 接口对象=new 实现类()
接口的实现类
要么重写接口中的所有抽象方法
要么是抽象类
注意:
接口类中通常只写抽象方法
接口类中的抽象方法可以不用abstract修饰
接口中的方法(非静态方法)默认都是抽象方法
接口中的抽象方法写在抽象类中不是也可以吗?为什么要分开?
为了方便管理
属性在抽象父类中
方法(方法重写)在就接口中