多态性是oop中的一个重要特性主要是用来实现动态联编的。
就是程序的最终状态只有在执行过程中才被决定而非在编译期间就决定了。这对于大型系统来说能提高系统的灵活性和扩展性。
多态存在的3个必要条件:
要有继承、要有方法重写、父类引用指向子类对象。
(由父类出面接工作,具体由他孩子去做这件事)
子类转换为父类是自动转换 也叫向上转型 (安全)
上转型对象不能操作子类新增的成员变量和方法
上转型对象可以操作子类,继承或重写的成员变量和方法
如果子类重写了父类的某个方法,上转型对象调用该方法时,是调用的重写方法
父类转换子类 :需要强制转换 (不安全)
不是做手术,而是父类的真面目就是一个子类,否则会出现类型的转换错误。
Person p2 = new Person();
OldStudent oo = (OldStudent)p2;
person 为父类 OldStudent 是子类
简单概括就是
向上转型:子类转父类 父类出面而子类做事
向下转型:父类再转成原有的子类 (强制转换 注意会发生转换异常)
instanceof 用来判断是否同一类型 A instanceof B 是同一类型就返回true
final 最终的
修饰属性(变量):这个变量就成了常量。
修饰方法:这个方法不能被子类重写
修饰类:这个类不能被继承
abstract 抽象的 修饰类和方法 是之成为抽象类和抽象方法
抽象方法是为了让子类重写,没有方法体
抽象类的定义:一个被abstract修饰的类或者说 包含一个抽象方法的类就是抽象类(注意 抽象类中不一定会有抽象方法)
抽象类意义就是为了继承
抽象类可以有0个、1个、多个抽象方法
抽象的东西 不可以被new关键字new出来