多态----------父类引用变量可以指向子类对象。
1.多态的前提是必须有子父类关系或者类实现接口关系,否则无法完成多态。
2.在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。
父类 变量名 = new 子类();
l 抽象类多态定义的格式
抽象类 变量名 = new 抽象类子类();
l 接口多态定义的格式
接口 变量名 = new 接口实现类();
同一个父类的方法会被不同的子类重写。在调用方法时,调用的为各个子类重写后的方法。
当变量名指向不同的子类对象时,由于每个子类重写父类方法的内容不同,所以会调用不同的方法。
多态中,成员特点
\* 成员变量:
*编译的时候, 参考父类中有没有这个变量,如果有,编译成功,没有编译失败
\* 运行的时候, 运行的是父类中的变量值
\* 编译运行全看父类
* 成员方法:
*编译的时候, 参考父类中有没有这个方法,如果有,编译成功,没有编译失败
* 运行的时候, 运行的是子类的重写方法
* 编译看父类,运行看子类
tips
1.多态称为向上转型,多态时,父类引用指向子类对象,是无法调用子类新方法的,无法调用子类特有的方法,变量等。
2.向下转型,是对已经向上转型的对象,引用的一个向下转型,例如 向下转型:子类 变量=(子类)上转型变量
package day01;
public class Fu {
int num = 4;
void show() {
System.out.println("Fu show num");
}
}
class Zi extends Fu {
int num = 5;
void show1() {
System.out.println("Zi show num");
}
}
class Demo {
public static void main(String[] args) {
Fu f = new Zi();
f.show(); // 调用的是父类的show方法
Zi f1 = (Zi) f;//向下转型,是在向上转型的基础上进行的
f1.show1();
}
}

向下转型后可以调用父类子类方法
1.什么时候使用向上转型:
当不需要面对子类类型时,通过提高扩展性,或者使用父类的功能就能完成相应的操作,这时就可以使用向上转型。
2.什么时候使用向下转型
当要使用子类特有功能时,就需要使用向下转型。
如:Dog d = (Dog) a; //向下转型
d.lookHome();//调用狗类的lookHome方法
3. 向下转型的好处:可以使用子类特有功能。
4.弊端是:需要面对具体的子类对象;在向下转型时容易发生ClassCastException类型转换异常。在转换之前必须做类型判断。
如:if( !a instanceof Dog){…}
封装:把对象的属性与方法的实现细节隐藏,仅对外提供一些公共的访问方式
继承:子类会自动拥有父类所有可继承的属性和方法。
多态:配合继承与方法重写提高了代码的复用性与扩展性;如果没有方法重写,则多态同样没有意义。
5.如:if( !a instanceof Dog){…} boolean b = 对象 instanceof 数据类型;
判断该对象是否是该数据类型的对象
Fu f = new Zi();
Fu fu = new Fu();
f.show();
Zi f1 = (Zi) f;//向下转型,是在向上转型的基础上进行的
f1.show1();
boolean b = new Object() instanceof Fu;
System.out.println(b);

、
浙公网安备 33010602011771号