提示:本文为学习java基础篇的笔记 详解视频见于
B站
【零基础 快速学Java】韩顺平 零基础30天学会Java
前言
多态的前提是两个对象(类)存在继承关系
提示:以下是本篇文章正文内容,下面案例可供参考
。
二、多态的特点
1.向上转型
(1)本质:父类的引用指向了子类的对象
(2)语法:父类类型 引用名 = new 子类类型();
(3)特点:编译类型看左边,运行类型看右边
可以调用父类中的所有成员(需遵守访问权限),不能调用子类中特有成员;最终运行效果看子类的具体实现;
代码如下(示例):
Animal.class:
public class Animal {
String name = "动物";
int age = 10;
public void sleep() {
System.out.println("睡");
}
public void run() {
System.out.println("跑");
}
public void eat() {
System.out.println("吃");
}
public void show() {
System.out.println("hello,你好");
}
}
Cat.class:
public class Cat extends Animal{
public void eat() //方法重写
{
System.out.println("猫吃鱼");
}
public void catchMouse() {
System.out.println("猫抓老鼠");
}
}
PolyDetail:
public class PolyDetail {
public static void main(String[] args) {
//多态的向上转型:父类的引用指向了子类的对象
Animal animal = new Cat();
Object object = new Cat();
//向上转型调用方法的规则如下:
//(1)可以调用父类的所有成员
//(2)不能调用子类的特有的成员(重点)
//(3)在编译阶段,能调用那些成员,是由编译类型来决定的
//(4)最终运行效果看子类的具体实现,即调用方法时,按照子类开始查找方法
//然后调用规则按照之前的规则
animal.eat();//猫吃鱼
animal.run();//跑
animal.sleep();//睡
}
}
运行结果:
2.向下转型
(1)语法:子类类型 引用名 = (子类类型) 父类引用
(2)只能强转父类的引用,不能强转父类的对象
(3)要求父类的引用必须指向的是当前目标类型的对象
(4)可以调用子类类型中所有的成员
代码如下(示例):
public class PolyDetail {
public static void main(String[] args) {
//多态的向上转型:父类的引用指向了子类的对象
Animal animal = new Cat();
Object object = new Cat();
//多态的向下转型
//(1)语法:子类类型 引用名 = (子类类型) 父类引用
//编译类型和运行类型都是Cat
Cat cat = (Cat) animal;
cat.catchMouse();//猫抓老鼠
//(2)要求父类的引用必须指向的是当前目标类型的对象
// Dog dog =(Dog) animal;//不可以 Dog和cat是同一级
}
}
Dog.class
public class Dog extends Animal {
public void eat() //方法重写
{
System.out.println("猫吃鱼");
}
public void DogBone() {
System.out.println("狗吃骨头");
}
}
运行结果:
如果父类的引用指向Dog类型的对象
运行结果:
总结
以上就是今天要讲的内容,本文仅仅简单介绍了多态的特点,多态的向上转型和向下转型。