多态:
定义:
意思是能够呈现不同的形态,在程序中意味着一个特定类型的变量可以引用不同类型的对象且可以调用对象,并且能自动调用引用对象的方法,也就是根据不同的对象,相应不同的操作。
子类对象引用父类类型
1、父类的方法被子类重写
2、在其他类中,有一个参数为父类类型的方法,调用了被重写的父类方法
3、调用时(传递实参时),实参是子类对象,就会调用该子类对象重写后的方法
public abstract class Pet {
int health;
abstract void toWeiShi();
}
public class DogDog extends Pet {
static int health=20;
void toWeiShi(){
System.out.println("狗狗吃骨头,健康值+20");
health+=20;
}
}
public class Frog extends Pet{
static int health=20;
void toWeiShi(){
System.out.println("青蛙吃虫子,健康值+10");
health+=10;
}
}
public class Text01 {
public static void main(String[] args) {
DogDog dabao = new DogDog();
Frog xiaogua = new Frog();
while (dabao.health < 100) {
dabao.toWeiShi();
System.out.println("大宝的健康值回复到:" + dabao.health);
}
System.out.println("宠物健康值已满,不需再喂食啦!");
while(xiaogua.health<100){
xiaogua.toWeiShi();
System.out.println("小瓜的健康值回复到:"+xiaogua.health);
}
System.out.println("宠物健康值已满,不需再喂食啦!");
}
}
类型转换:
大类型接收小类型,默认转成大类型
小类型接收大类型,强制转成小类型(会丢失精度)
原则上类型要能转才允许转,一般用instanceof关键字判断
if(对象名 instanceof 类型){
子类型 新对象名=(子类型)对象名;
//可以用新对象名来调用子类特有的方法
}
多态实现代码:
public class Pet {
public void toHospital(){
System.out.println("宠物看病!");
}
}
public class Dog extends Pet{
public void toHospital(){
System.out.println("狗狗看病!");
}
}
public class Bird extends Pet{
public void toHospital(){
System.out.println("小鸟看病!");
}
}
public class Text {
public static void main(String[] args) {
Pet niannian=new Pet();
niannian=new Dog();
niannian.toHospital();
niannian=new Bird();
niannian.toHospital();
}
}
用instanceof判断的多态实现代码:
public class Text {
public static void main(String[] args) {
Pet pet=new DogDog();//向上转型
// pet.toWeiShi();
if (pet instanceof DogDog){
DogDog dabao=(DogDog)pet;//向下转型
dabao.toWeiShi();//执行狗狗特喂食有属性
}else if (pet instanceof Frog){
Frog xiaogua=(Frog)pet;
xiaogua.toWeiShi();//执行青蛙喂食特有属性
}
}
}