多态的两种形式
父类名 对象名 = new 子类名();父类只能使用父类中的方法
接口名 对象名 = new 实现类名()
1,多态中的成员变量的使用(和继承一样)
当父类与子类中存在重名成员变量时 在创建类对象时等号左边是哪个类就用哪个类中的成员变量
如 父类 对象名 = new 子类名(),对象名.重名变量;此时使用的是等号左边的父类中的成员变量的值
2,多态中的成员方法调用(和继承一样)
当父类与子类中存在重名成员变量时,在创建对象时等号右边new的是谁就优先调用谁的重名方法,没有则向父类中找
如 父类 对象名 = new 子类名()时,多态调用方法的实质是在编译器(编写代码的时候)会先去父类中查找有没有
(对象名.方法名)这个方法有的话编译期就不会报错,但是在运行期时会先去子类中查找有没有这个方法有的直接执行,
不会不执行父类中的重名方法,所以使用多态时类对象不可以调用父类中没有的方法(但是可以将类对象强制转换为子类对象)
public class PolymorphicClass {
public static void main(String[] args) {
Fu OBJ = new Zi();
((Zi)OBJ).methodZi();
// OBJ.methodZi();//编译期就报错
}
}
public class Fu {
public void method(){
System.out.println("父类中的method方法");
}
public void methodFu(){
System.out.println("父类中的methodFu放啊发");
}
}
public class Zi extends Fu{
@Override
public void method(){
System.out.println("子类中的method方法");
}
public void methodZi(){
System.out.println("子类中的methodZi方法");
}
}
多态的好处
使用多态时在创建对象时不管心new的是哪个对象(必须是子类),等号的左边使用其父类作为接收的,所以当把父类作为方法的参数时,只要调用方法传入的参数时其子类时都可以将其传入,并使用这个传入的参数可以调用这个子类中的方法