多态
1.可将子类的对象赋值给超类型的变量
(1)父类:Employee
/**
* @ClassName Employee
* @Author Gavin
* @Date 2020/8/16
**/
public class Employee {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
int age;
}
(2)子类:Manager
/**
* @ClassName Manager
* @Author Gavin
* @Date 2020/8/16
**/
public class Manager extends Employee{
String tile;
public String getTile() {
return tile;
}
public void setTile(String tile) {
this.tile = tile;
}
}
(3)测试类 TestMain。由于Manager是Employee的子类,所以可直接赋值。
/**
* @ClassName TestMain
* @Author Gavin
* @Date 2020/8/16
**/
public class TestMain {
public static void main(String[] args) {
Employee employee = new Manager();
}
}
2.若父类变量接受了子类对象的赋值,当要重新转回子类变量时需要强制类型转换。继续使用上面的Employee 和 Manager为例。
(1)不支持从上(父)往下(子)直接转,编译报错。
(2)此时需要强制转(强制转也会报错)。强制转的前提是父类变量被子类对象赋值,重新转回子类变量的时候可以强制转
(3)通常为了避免运行时异常,会使用instanceof做一个与判断。因为employee2引用的是从Manager实例,所以可通过强制转换转回去;employee1则引用的是Employee实例,不支持向下强转回去
3.总结:子类转父类,直接转;父类转子类需要强制类型转换,为避免运行时错误,转换前可使用instanceof判断