1.多态(java三大特性之一)
概述:同一个对象,具有多种形态
例如:Student ----> 人
Student ----> 员工
2.多态的前置条件
- 继承或者实现【二选一】
- 方法的重写【意义体现:不重写,无意义】
- 父类引用指向子类对象【格式体现】
3.代码演示
//父类
public class Animal {
public void eat() {
System.out.println(“动物吃”);
}
}
public class Dog extends Animal{
@Override
public void eat() {
System.out.println(“狗吃骨头!”);
}
//Animal ----> Cat
//Animal ----> Dog
}
public class Cat extends Animal{
@Override
public void eat() {
System.out.println("猫吃鱼!");
}
}
public class Test {
public static void main(String[] args) {
//多态:父类的引用 = 子类对象
Animal a = new Cat();
a.eat();
Animal d = new Dog();
d.eat();
}
//练习:父类Fruit 子类:apple an apple a day keeps doctor away!
//子类:西瓜
//重写的方法:show(),父类:水果超甜 子类重写–>苹果超甜 ---->西瓜超甜
}
4.多态的好处
实际开发的过程中,父类类型作为方法形式参数,传递子类对象给方法,
进行方法的调用,更能体现出多态的扩展性与便利。
public class Animal {
public void eat() {
System.out.println(“吃东西”);
}
}
------------------------------------------
public class Cat extends Animal{
@Override
public void eat() {
System.out.println(“吃鱼”);
}
}
------------------------------------------
public class Dog extends Animal{
@Override
public void eat() {
System.out.println(“吃骨头”);
}
}
------------------------------------------
public class Pig extends Animal{
@Override
public void eat() {
System.out.println(“吃白菜”);
}
}
------------------------------------------
public static void main(String[] args) {
//多态的形式创建对象
animalEat(new Dog());
animalEat(new Cat());
animalEat(new Pig());
}
public static void animalEat(Animal a) {
a.eat();
}
5.多态的转型
5.1向上转型:Animal a = new Cat();
5.2向下转型: 有些时候Cat或者Dog里面有一些自己特有的方法
这个时候就需要进行向下转型
Animal c = new Cat();
Cat cat = (Cat)c;
cat.show();
Animal d = new Dog();
Dog dog = (Dog)d;
dog.show();
5.3值得注意的是:思考,猫—>狗 必然不可以
Animal c = new Cat();
Dog dog = (Dog)c;
dog.show();//必然报错ClassCastException
5.4解决方案,先判断类型再强转
Animal c = new Cat();
if(c instanceof Cat) {
Cat cat = (Cat)c;
cat.show();
}
if(c instanceof Dog) {
Dog dog = (Dog)c;
}
练习1(必做)
//练习:父类Fruit 子类:apple an apple a day keeps doctor away!
//子类:西瓜
//重写的方法:show(),父类:水果超甜 子类重写–>苹果超甜 ---->西瓜超甜
练习2(必做)
2.1笔记本电脑(laptop)通常具备使用USB设备的功能。
在生产时,笔记本都预留了可以插入USB设备的USB接口,
请定义USB接口,具备最基本的开启open()功能和close()关闭功能。
2.2分析鼠标和键盘要想能在电脑上使用,那么鼠标和键盘也必须遵守USB规范,实现USB接口。
分析:
进行描述笔记本类,实现笔记本使用USB鼠标、USB键盘
USB 接口,包含开启功能、关闭功能
笔记本类,包含1.运行功能、2.关机功能、3.使用 USB设备功能
鼠标类,要实现 USB接口,并具备点击的方法
键盘类,要实现 USB接口,具备敲击的方法
6.接口的多态
public interface Door {
public abstract void open();
public abstract void close();
}
public class DoorImpl implements Door{
@Override
public void open() {
System.out.println(“开门”);
}
@Override
public void close() {
System.out.println("关门");
}
}
public class DoorImpl2 implements Door{
@Override
public void open() {
System.out.println(“芝麻开门”);
}
@Override
public void close() {
System.out.println("芝麻官们");
}
}
public class Test {
//01.要有继承或者实现的关系
//02.要重写父类的方法
//03.父类引用指向子类对象
public static void main(String[] args) {
Door d = new DoorImpl();//接口的多态
d.open();
d.close();
Door d2 = new DoorImpl2();
d2.open();
d2.close();
}
}