多态的概念
概念 :一个对象拥有多种形态,这就是:对象的多态性,
代码当中体现多态性:
其实就是一句话:父类引用指向子类对象。
格式:
父类名称 对象名 = new 子类名称();
或者:
接口名称 对象名 = new 实现类名称();
//格式:
Usb usb = new Mouse();//多态
多态的前提
必须是类与类之间的关系,要么是继承(extends),要么是实现(implements),通常还有一个前提,就是存在覆盖(重写)。
类型转换(向上转型,向下转型)
//多态的向上转型,其实就是多态写法:
//向上转型是安全的。从小范围转向了大范围。
//向上转型只能调用父类与子类中共有的方法
// 格式: 父类名称 对象名 = new 子类名称();
//含义:右边创建一个子类对象,把它当作父类来看待
//多态的向下转型,其实就是一个还原动作
Usb usb = new Mouse();//多态,向上转型。
Mouse mouse = (Mouse)usb;///多态中向下转系
多态的代码中,成员方法的访问规则是:
看new 的是谁,就优先用谁,没有则向上找
多态中成员方法:
口诀:编译看左,运行看右
多态中成员变量
口诀: 编译看左,运行看左
多态的实例:
package cn.yunhe.weekend;
public class Work {
public static void main(String[] args) {
//父类引用指向子类对象
Animal animal = new Cat();//多态,也是向上转型
// System.out.println(animal.age); //这里调用的是父类中的成员变量
animal.eat();//编译看左,运行看右,当右边没有eat方法时,自动调用父类中的eat方法。
// animal.climb();//这里不能调用climb方法,只能调用父类和子类中共有的方法,只能通过向下转型调用子类中特有的方法
Cat cat = (Cat)animal;//多态的向下转型
cat.climb();//向下转型可以调用子类中特有的方法
}
}
//创建一个动物类
class Animal{
int age = 10;
//创建一个吃的方法
public void eat() {
System.out.println("会吃的动物");
}
public void sleep() {
System.out.println("会睡的动物");
}
}
//创建一个动物的子类,猫
class Cat extends Animal{
int age = 2 ;
//子类特有的方法
public void climb() {
System.out.println("会爬树的猫");
}
//方法重写
@Override
public void eat() {
System.out.println("会吃猫粮的蓝猫");
}
//方法重写
@Override
public void sleep() {
System.out.println("喜欢睡觉的猫");
}
}
class Dog extends Animal{//动物的一个子类 狗
//方法重写
@Override
public void eat() {
System.out.println("会吃骨头的柯基");
}
//方法重写
@Override
public void sleep() {
System.out.println("喜欢睡觉的柯基");
}
}