多态:
父类引用变量可以指向子类对象
前提时必须有子父类关系或者类实现接口关系
使用多态后的父类引用变量调用方法时,会调用子类重写后的方法
定义和使用格式:
父类类型 变量名 = new 子类();
抽象类 变量名 = new 抽象类子类();
接口 变量名 = new 接口实现类() ;
变量名.方法名( ) ;
同一个父类方法会被不同子类重写,在调用方法时,调用的为各个子类重写后的方法。
多态成员变量特点:
编译运行看左边。
多态成员方法特点:
编译看左边,运行看右边。
instanceof关键字来判断某个对象是否属于某种数据类型
boolean b = 对象 instanceof 数据类型;
多态转型:
向上转型:子类对象赋值给一个父类引用
父类类型 变量名 = new 子类类型();
向下转型:已经向上转型的子类对象可以使用强制类型转换将父类引用转为子类引用,直接创建父类对象无法向下转型。
子类类型 变量名 = (子类类型) 父类类型的变量;
多态的好处和弊端
父类引用指向子类对象时,就发生了向上转型(把子类类型对象转成父类类型),好处是隐藏了子类类型,提高了代码的扩展性。弊端是只能使用父类共性的内用,无法使用子类特有的功能,功能有限制。
什么时候使用向上转型?
当不需要面对子类类型时,通过提高扩展性,或只使用父类功能就能完成操作。
什么时候使用向下转型?
需要使用子类特有功能时,向下转型时容易发生类型转换异常,转换前必须使用instanceof作类型判断。
面向对象三大特征总结:
l 封装:把对象的属性与方法的实现细节隐藏,仅对外提供一些公共的访问方式
l 继承:子类会自动拥有父类所有可继承的属性和方法。
l 多态:配合继承与方法重写提高了代码的复用性与扩展性;如果没有方法重写,则多态同样没有意义。
多态:
父类引用变量可以指向子类对象
前提时必须有子父类关系或者类实现接口关系
使用多态后的父类引用变量调用方法时,会调用子类重写后的方法
定义和使用格式:
父类类型 变量名 = new 子类();
抽象类 变量名 = new 抽象类子类();
接口 变量名 = new 接口实现类() ;
变量名.方法名( ) ;
同一个父类方法会被不同子类重写,在调用方法时,调用的为各个子类重写后的方法。
多态成员变量特点:
编译运行看左边。
多态成员方法特点:
编译看左边,运行看右边。
instanceof关键字来判断某个对象是否属于某种数据类型
boolean b = 对象 instanceof 数据类型;
多态转型:
向上转型:子类对象赋值给一个父类引用
父类类型 变量名 = new 子类类型();
向下转型:已经向上转型的子类对象可以使用强制类型转换将父类引用转为子类引用,直接创建父类对象无法向下转型。
子类类型 变量名 = (子类类型) 父类类型的变量;
多态的好处和弊端
父类引用指向子类对象时,就发生了向上转型(把子类类型对象转成父类类型),好处是隐藏了子类类型,提高了代码的扩展性。弊端是只能使用父类共性的内用,无法使用子类特有的功能,功能有限制。
什么时候使用向上转型?
当不需要面对子类类型时,通过提高扩展性,或只使用父类功能就能完成操作。
什么时候使用向下转型?
需要使用子类特有功能时,向下转型时容易发生类型转换异常,转换前必须使用instanceof作类型判断。
面向对象三大特征总结:
l 封装:把对象的属性与方法的实现细节隐藏,仅对外提供一些公共的访问方式
l 继承:子类会自动拥有父类所有可继承的属性和方法。
l 多态:配合继承与方法重写提高了代码的复用性与扩展性;如果没有方法重写,则多态同样没有意义。