1.多态
1.1方法的多态
方法的重写就是方法多态的体现形式,方法重载不是多态(因为方法重载是编译期决定好的, 没有后期也就是运行期的动态绑定)当满足这三个条件:1、有继承 2、有重写 3、要有父类引用 指向子类对象才是多态。
1.2对象的多态
1.一个对象的编译类型和运行类型不一样
2.编译类型是在定义对象的时候就已经确定好的
3.运行类型是可以改变的
4.编译类型看 = 左边 运行类型看 = 右边
Pewson person = new Person ();
多态就是父类的引用指向子类的对象
例如:
package com.qfedu.a_duotai;
class PizzaFactory {
public void creatPizza (Pizza pizza) {
pizza.make();
}
}
abstract class Pizza {
String name;
double price;
char size;
public abstract void make();
}
class BaconPizza extends Pizza {
@Override
public void make() {
// TODO Auto-generated method stub
System.out.println("制作" + name + price + size);
}
}
class SeafoodPizza extends Pizza {
@Override
public void make() {
// TODO Auto-generated method stub
System.out.println("制作" + name + price + size);
}
}
public class Demo01 {
public static void main(String[] args) {
Pizza pizza = new BaconPizza();
pizza.name = "培根披萨";
pizza.price = 34.5;
pizza.size = '大';
PizzaFactory pizzaFactory = new PizzaFactory();
pizzaFactory.creatPizza(pizza);
}
}
注意事项:
1.必须有继承
2.必须有重写
3.= 左边是父类的引用,= 右边是子类的对象
1.3多态的转型
1.3.1多态的向上转型
本质就是:父类的引用指向之类的对象
语法格式:父类 父类引用 = new 子类();
将子类的对象赋值给父类的引用,小范围转大范围,自动转换
父类的引用可以调用父类所有的方法,可以调用子类重写父类的方法,但是不能调用子类独有的方法
1.3.2多态的向下转型
语法格式
父类类型 父类引用 = new 子类(); 子类类型 子类引用 = (子类类型)父类的引用;
大范围转小范围,需要强制转换
向下转型要先向上转型再向下转型
1.4instanceof关键字
比较操作符,返回值是布尔类型的数据
语法格式:
对象引用 instanceof 运行类型
用来判断对象的运行类型(=右边), 是否是xx类型或者xx类型的子类
目的是为了在强转的时候不出现问题。