提示:本文为学习java基础篇的笔记 详解视频见于
B站
【零基础 快速学Java】韩顺平 零基础30天学会Java
前言
计算机程序运行时,相同的消息可能会送给多个不同的类别之对象,而系统可依据对象所属类别,引发对应类别的方法,而有不同的行为。简单来说,所谓多态意指相同的消息给予不同的对象会引发不同的动作。
提示:以下是本篇文章正文内容,下面案例可供参考(案例来自B站
【零基础 快速学Java】韩顺平 零基础30天学会Java)
一、多态是什么?
方法或对象具有多种形态。是面向对象的第三大特征,多态是建立在封装和继承基础之上的。
二、多态的具体体现
1.方法的多态(重写和重载体现多态)
代码如下(示例):
public class PloyMethod { //面向对象多态—方法的多态(重载和重写)
public static void main(String[] args) {
//方法重载体现多态
A a = new A();
//传入不同的参数,就会调用不同的sum方法,体现方法的多态
System.out.println(a.sum(10, 20));
System.out.println(a.sum(10, 20, 30));
//方法重写体现多态
B b = new B();
a.say();
b.say();
}
}
class B { //父类
public void say() {
System.out.println("B的 say()方法被调用了");
}
}
class A extends B { //子类
public int sum(int n1, int n2) { //和下面的sum方法构成重载
return n1 + n2;
}
public int sum(int n1, int n2, int n3) {
return n1 + n2 + n3;
}
public void say() {
System.out.println("A的say方法被调用了");
}
}
运行结果:
30
60
A的say方法被调用了
B的 say()方法被调用了
具体教学详解视频:韩顺平老师面向对象-方法的多态(重写和重载的体现)
2.对象的多态
(1)一个对象的编译类型和运行类型可以不一致
(2)编译类型在定义对象时,就确定了,不能改变。
(3)运行类型是可以变化的。
(4)编译类型看定义时 = 号左边,运行类型看 = 号的右边。
例如:
Animal animal = new Dog();
[animal编译类型是Animal,运行类型是Dog]
代码如下(示例):
Animal.class:
public class Animal { //父类
public void cry()
{
System.out.println("动物在叫唤......");
}
}
Cat.class:
public class Cat extends Animal { //子类
public void cry()
{
System.out.println("Cat 小猫喵喵叫");
}
}
Dog.class:
public class Dog extends Animal { //子类
public void cry() {
System.out.println("Dog 小狗汪汪叫");
}
}
PolyObject.class:
public class PolyObject {
public static void main(String[] args) {
//体现对象多态特点
Animal animal = new Dog();//运行类型是Dog 执行的方法就是Dog cry()
animal.cry();//小狗汪汪叫 执行方法时注意该对象的运行类型Dog
animal = new Cat();//编译类型Animal,运行类型是Cat 执行的方法就是Cat cry()
animal.cry();//小猫喵喵叫 执行方法时注意该对象的运行类型Cat
}
}
执行结果为该对象的运行类型中的方法
运行结果:
Dog 小狗汪汪叫
Cat 小猫喵喵叫
具体教学详解视频:韩顺平老师面向对象-对象的多态
3.多态的入门案例
Animal父类以及它的子类们
public class Animal {//父类
private String name;
public Animal(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Dog extends Animal { //子类
public Dog(String name) {
super(name);
}
}
public class Cat extends Animal { //子类
public Cat(String name) {
super(name);
}
}
public class Pig extends Animal{ //子类
public Pig(String name)
{
super(name);
}
}
Food父类以及它的子类们
public class Food {
private String name;
public Food(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Bone extends Food {
public Bone(String name) {
super(name);
}
}
public class Fish extends Food {
public Fish(String name) {
super(name);
}
}
public class Rice extends Food {
public Rice(String name) {
super(name);
}
}
Master.class:
public class Master {
private String name;
public Master(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//使用多态机制,可以统一的管理主人喂食的问题
public void feed(Animal animal, Food food) {
System.out.println("主人" + name + "给" + animal.getName() + "吃" + food.getName());
}
}
poly01.class:
public class poly01 {
public static void main(String[] args) {
Master tom = new Master("汤姆");
Dog dog = new Dog("大黄");
Bone bone = new Bone("骨头");
System.out.println("-----------");
tom.feed(dog, bone);
Cat cat = new Cat("小花猫");
Fish fish = new Fish("黄花鱼");
System.out.println("-----------");
tom.feed(cat, fish);
Pig pig = new Pig("小花猪");
Rice rice = new Rice("米饭");
System.out.println("-----------");
tom.feed(pig, fish);
}
}
运行结果:
-----------
主人汤姆给大黄吃骨头
-----------
主人汤姆给小花猫吃黄花鱼
-----------
主人汤姆给小花猪吃黄花鱼
具体教学详解视频:韩顺平老师面向对象-多态的快速入门案例
总结
以上就是今天要讲的内容,本文介绍了方法和对象多态的具体体现以及相关使用案例。具体代码实现以及使用,在了解原理的基础上需要勤加练习即可掌握。