提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
多态
一、多态的概述
一个对象,多种形态;
二、多态的前提
有继承或有实现
三 、多态的代码形式(重点)
父类类型 变量名 = new 子类类名();
代码如下(示例):
ublic class Test1Polymorphic {
/*
多态的前提:
1. 要有(继承 \ 实现)关系
2. 要有方法重写
3. 要有父类引用, 指向子类对象
*/
public static void main(String[] args) {
// 当前事物, 是一只猫
Cat c = new Cat();
// 当前事物, 是一只动物
Animal a = new Cat();
a.eat();
}
}
class Animal {
public void eat(){
System.out.println("动物吃饭");
}
}
class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫吃鱼");
}
四、多态中成员访问的特点
成员变量(了解)
编译和运行都看父类类型;
成员方法(重点)
编译看左边(父类),运行看右边;(子类)
代码如下(示例):
ublic class Test2Polymorpic {
/*
多态的成员访问特点:
成员变量: 编译看左边 (父类), 运行看左边 (父类)
成员方法: 编译看左边 (父类), 运行看右边 (子类)
*/
public static void main(String[] args) {
Fu f = new Zi();
System.out.println(f.num);
f.method();
}
}
class Fu {
int num = 10;
public void method(){
System.out.println("Fu.. method");
}
}
class Zi extends Fu {
int num = 20;
public void method(){
System.out.println("Zi.. method");
}
}
多态的好处和弊端
多态的转型
向上转型: 子类对象,转成父类类型, Fu f = new Zi();
向下转型: 父类对象,转成子类类型, Zi z = (Zi)f;
多态的类型转换异常
为了解决类型转换异常,在转换之前,应该先判断被转的对象是否与目标类型一致;
判断的格式:
if(对象名 instanceof 类名){
在这里转
}