“深入剖析Java多态:点燃编程世界火花“

White graces:个人主页

专栏推荐:Java入门知识

 内容推荐:“继承与组合:代码复用的两种策略“

今日诗词:马踏祁连山河动,兵起玄黄奈何天


快去学习

“深入剖析Java多态:点燃编程世界火花“_第1张图片

思维导图

“深入剖析Java多态:点燃编程世界火花“_第2张图片

一.多态概念

多态:不同对象执行同一方法产生出不同结果

比如:狗狗吃饭和猫咪吃饭,同样吃饭,狗狗吃狗粮,猫咪吃猫粮,这也是多态

二.多态实现条件

三要素: 1.继承

                    2.子类必须要对父类方法进行重写

                    3.通过父类的引用调用重写的方法

这三者同时具备形成了多态

package Test1;
class Animal {
    String name;
    int age;

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void eat() { //父类的方法
        System.out.println(age + "岁的" + name + "正在吃-----");
    }
}
class Dog extends Animal {
    public Dog(String name, int age) {
        super(name,age);
    }
    @Override           //这表明父类方法被重写了
    public void eat() {  //子类重写父类方法
        System.out.println(age + "岁的" + name + "正在吃狗粮");
    }
}
class Cat extends Animal {
    public Cat(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat() {     //子类重写父类方法
        System.out.println(age + "岁的" + name + "正在吃猫粮");
    }
}
public class Test1 {
    public static void eat(Animal animal) { //Animal animal就是父类的引用
        animal.eat();
    }
    public static void main(String[] args) {

        Dog dog = new Dog("狗狗", 3);
        Cat cat = new Cat("猫猫", 4);
        eat(dog); ///通过父类的引用调用对应的eat方法
        eat(cat);
    }
}

运行结果

“深入剖析Java多态:点燃编程世界火花“_第3张图片

三.重写和重载

重写:方法名不变、参数不变、返回类型不变、内容随意(除了内容,其他和父类保持一致

重载:方法名不变、参数必须改变、返回类型可以改变、内容随意

可以参考下图

“深入剖析Java多态:点燃编程世界火花“_第4张图片

四.转型

1.向上转型

实际就是创建一个子类对象

语法:父类类型  对象名 = new 子类类型

package Test1;
class Animal {
    String name;
    int age;

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void eat() { //父类的方法
        System.out.println("父类方法");
    }
}
class Dog extends Animal {
    public Dog(String name, int age) {
        super(name,age);
    }
    @Override           //这表明父类方法被重写了
    public void eat() {  //子类重写父类方法
        System.out.println(age + "岁的" + name + "正在吃狗粮");
    }
    public void bark() {
        System.out.println("汪汪叫");
    }
}

public class Test1 {
    public static void eat(Animal animal) { //Animal animal就是父类的引用
        animal.eat();
    }
    public static void main(String[] args) {
        Animal animal =new Dog("狗狗",3);
        eat(animal); 
        animal.eat(); //两者运行结果相同
    }
}

“深入剖析Java多态:点燃编程世界火花“_第5张图片

值得注意的是:向上转型之后就不能调用了子类Dog特有的bark方法了

2.向下转型

向下转型用到的方法是强制类型转换

我们来看一个实例

“深入剖析Java多态:点燃编程世界火花“_第6张图片

1.instanceof关键字

作用:检查对象实际类型 是否是 某个类或某个类的子类的类型

返回类型:  boolean类型

格式:对象名 + instanceof + 类型

五.多态与选择语句

分别用多态选择语句实现一个画图形功能

有四种图形:⚪,矩形,正方形,三角形,我们用类来描述

class Shape {
    public void draw() {
        System.out.println("画图型");
    }
}
class Yuan extends Shape {
    @Override  //重写
    public void draw() {
        System.out.println("⚪");
    }
}
class Juxing extends Shape {
    @Override //重写
    public void draw() {
        System.out.println("矩形");
    }
}
class Fang extends Shape {
    @Override
    public void draw() {
        System.out.println("正方形");
    }
}
class San extends Shape {
    @Override
    public void draw() {
        System.out.println("三角形");
    }
}

选择语句实现

“深入剖析Java多态:点燃编程世界火花“_第7张图片

 

多态实现“深入剖析Java多态:点燃编程世界火花“_第8张图片

六.重写方法的调用

我们来看一下面的坑爹例子

package Test1;
class B {
    public B() {
        func();  //构造方法中调用func方法
    }
    public void func() {
        System.out.println("B.func()");
    }
}
class D extends B {
    private int num = 1;
    @Override
    public void func() {  //子类重写了父类的func方法
        System.out.println("D.func() " + num);
    }
}
public class Test1 {
    public static void main(String[] args) {
        D d = new D();
    }
}

运行结果和分析

“深入剖析Java多态:点燃编程世界火花“_第9张图片

 温馨提示

尽量不要在构造方法中调用其他方法

以上就是这篇文章的所有内容了

谢谢阅读本文,希望你能从中获得一些启发和思考 

.结语+美图分享


✨谢谢你的阅读和耐心!祝愿你在编程的道路上取得更多的成功与喜悦!"✨

⭐️点赞收藏加关注,学习知识不迷路⭐️

✔️✔️✔️✔️

⛳️ 点赞☀️收藏 ⭐️ 关注

⛳️ 点赞☀️收藏 ⭐️ 关注

⛳️ 点赞☀️收藏 ⭐️ 关注

‍♂️‍♂️‍♂️‍♂️‍♂️‍♂️‍♂️‍♂️‍♂️‍♂️‍♂️‍♂️‍♂️

你可能感兴趣的:(java,开发语言)