多态
概述:Polymorphismm同一个方法调用,由于对象不同会有不同的行为。
多态条件:重写、继承、引用(父类引用子类对象)。
父类引用指向子类对象并该父类引用调用子类重写的方法,此时就出现多态。
引用变量的两种类型
编译时类型:由声明类型决定,一般是父类。
运行时类型:由实际对应的类型决定,一般是子类。
比如:
AnimalPoly ap1 = new BirdPoly();AnimalPoly是编译时类型,BirdPoly是运行时类型。
多态的好处:我们不用针对每一个具体对象都去写相应的方法,直接通过父类对象辨别具体对象去引用,找到重载的方法输出即可。
示例:
package com.itcode.demo;
/**
* @author: 成都码到功成学员
* @description:
* 多态
* 多态条件:重写、继承、引用(父类引用子类对象)
*/
class AnimalPoly{
public void shout() {
System.out.println("动物叫");
}
}
// 多态条件:继承
class CatPoly extends AnimalPoly{
// 多态条件:重写
public void shout() {
System.out.println("喵喵");
}
}
class DogPoly extends AnimalPoly{
// 多态条件:重写
public void shout() {
System.out.println("汪汪");
}
}
class BirdPoly extends AnimalPoly{
// 多态条件:重写
public void shout() {
System.out.println("啾啾");
}
}
public class TestPoly {
public static void main(String[] args) {
DogPoly dp = new DogPoly();
// 多态条件:引用(父类引用子类对象)
animalShout(dp); // 汪汪
CatPoly cp = new CatPoly();
animalShout(cp);// 喵喵
BirdPoly bp = new BirdPoly();
animalShout(bp);// 啾啾
AnimalPoly ap = new AnimalPoly();
animalShout(ap);// 动物叫
// 当然也可以这样调用,效果也类似。
AnimalPoly ap1 = new BirdPoly();
animalShout(ap1);// 啾啾
}
// 父类引用指向子类对象并该父类引用调用子类重写的方法,此时就出现多态。
static void animalShout(AnimalPoly a) {
a.shout();
}
}示例2:关于多态运行分析
对象转型
向上转型:编译类型>声明类型,小转大,自动转。 编译看左,运行看右。
如:Animal a = new Cat();
向下转型:编译类型<声明类型,大转小,强转。可以使用子类特有方法。编译看左,运行看右。
比如:Cat c = (Cat)new Animal;
或者
示例
final
修饰变量:值不能被修改。
修饰方法:不能被重写,但可以重载。
修饰类:不能被继承。
Last updated
Was this helpful?