1.多态概念:
简介:多态是面向对象继承,封装之后的一大特性.
生活中”咖啡喵“是一个动物,同时也是只猫,那“咖啡喵”身上就出现了多态的情况,即是动物也是猫,那java中面向对象同样也可以描述一个事物的多种形态。在java中实现多态需要三个条件:
- 子类继承父类
- 子类重写父类的方法
- 父类引用指向子类对象(多态的主要体现)
2.父类引用指向子类对象:
代码中格式为:
父类类型 name=new 子类类型();
父类引用指向子类,就是父类对象new一个子类对象,为了同一个行为具有多种的表达形式.
注意:
- 多态是方法的多态,不是属性的多态
- 多态是一个接口使用不同实例来实现不同方法的操作.
3.多态调用技巧:
调用成员变量看左边:
Animal animal=new Cat();
System.out.println(animal.age);
调用方法看右边:
Animal animal=new Cat();
animal.run();
4.关键字instanceof:
关键字instanceof返回值为布尔类型用来判断是不是这个的实例化,与is-a的关系,案例如:
Animal animal=new Animal();
Animal dog=new Dog();
Animal cat=new Cat();
System.out.println(dog instanceof Animal);//理解为dog对象是Animal吗? true
System.out.println(animal instanceof Dog);//理解为animal对象是Dog吗? false 动物不止有狗
System.out.println(cat instanceof Animal);//理解为cat对象是Animal吗? true
System.out.println(animal instanceof Cat);//理解为animal对象是Cat吗? false 动物不止有猫
5.上下转型:
向上转型:子类对象转换为父类,小转大自动转,多态本身就是向上转型
父类类型 name=new 子类类型();
子类对象转为父类对象时可能会丢失本身独有的方法.
向下转型:父类对象转为子类,大转小强制转换
子类类型 name=(子类类型)父类对象;
用途:一般需要使用子类独有的方法才会向下转型
6.经典案例
答出下列代码会输出什么:
public class A {
public void Eat(){
System.out.println("爱吃大米饭");
}
}
class B extends A{
@Override
public void Eat() {
System.out.println("爱吃红烧肉");
}
public void Play(){
System.out.println("爱玩游戏");
}
}
class C extends B{
@Override
public void Play() {
System.out.println("爱刷短视频");
}
}
class Test_{
public static void main(String[] args) {
A a=new A();
A b=new B();
B c=new C();
a.Eat();
b.Eat();
c.Play();
}
}
7.通过方法实现多态
package com.tang.servlet;
public class Animal {
void chi() {
System.out.println("爱吃饭");
}
void wan() {
System.out.println("贪玩");
}
}
class Car extends Animal {
void chi() {
System.out.println("爱吃鱼");
}
}
class Test{
public static void main(String[] args){
Car car=new Car();
show(car);
}
public static void show(Animal animal){
animal.chi();
animal.wan();
}
}
或者使用方法进行多态的阐述结果如下:
爱吃鱼
贪玩
创作难免有错误和不当的地方,还请大家多多指教。