Java 多态
多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作,如图所示:
多态性是对象多种表现形式的体现。
现实中,比如我们按下 F1 键这个动作:
- 如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;
- 如果当前在 Word 下弹出的就是 Word 帮助;
- 在 Windows 下弹出的就是 Windows 帮助和支持。
同一个事件发生在不同的对象上会产生不同的结果。
多态的优点
- 1. 消除类型之间的耦合关系
- 2. 可替换性
- 3. 可扩充性
- 4. 接口性
- 5. 灵活性
- 6. 简化性
多态存在的三个必要条件
- 继承
- 重写
- 父类引用指向子类对象
比如:
Parent p = new Child();
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。
多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。
以下是一个多态实例的演示,详细说明请看注释:
public class Test {
public static void main(String[] args) {
show(new Cat()); // 以 Cat 对象调用 show 方法
show(new Dog()); // 以 Dog 对象调用 show 方法
Animal a = new Cat(); // 向上转型
a.eat(); // 调用的是 Cat 的 eat
Cat c = (Cat)a; // 向下转型
c.work(); // 调用的是 Cat 的 work
}
public static void show(Animal a) {
a.eat();
// 类型判断
if (a instanceof Cat) { // 猫做的事情
Cat c = (Cat)a;
c.work();
} else if (a instanceof Dog) { // 狗做的事情
Dog c = (Dog)a;
c.work();
}
}
}
abstract class Animal {
abstract void eat();
}
class Cat extends Animal {
public void eat() {
System.out.println("吃鱼");
}
public void work() {
System.out.println("抓老鼠");
}
}
class Dog extends Animal {
public void eat() {
System.out.println("吃骨头");
}
public void work() {
System.out.println("看家");
}
}
执行以上程序,输出结果为:
吃鱼
抓老鼠
吃骨头
看家
吃鱼
抓老鼠
大部分内容参考菜鸟教程,讲的真是通俗易懂。
/*
多态的格式:
父类(接口) 变量名 = new 子类();
多态的好处:
提高了代码的扩展性,前期定义的代码可以使用后期的内容
多态的弊端:clas
前期定义的代码不能使用子类独有(特有)的功能
多态使用的条件:
1.必须有继承,实现
2.必须要有方法的重写
多态中成员的特点:
1.成员变量和静态函数,以左边类型主
2.成员函数,以右边为主
*/
class Fu{
String name = "zs";
void talk(){
System.out.println("爸爸会讲中文...");
}
static void smoke(){
System.out.println("爸爸吸烟...");
}
}
class Zi extends Fu{
String name = "lisi";
void talk(){
System.out.println("儿子会讲英文...");
}
static void smoke(){
System.out.println("儿子吸烟...");
}
}
class DuotaiDemo4{
public static void main(String[] args){
Fu f = new Zi();
//f.talk();
//System.out.println(f.name);
f.smoke();
}
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/114822.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...