 
 
  🙉专栏推荐:Java入门知识🙉
🙉 内容推荐:“继承与组合:代码复用的两种策略“🙉
🐹今日诗词:马踏祁连山河动,兵起玄黄奈何天🐹
快去学习

🌸思维导图🌸

🌸一.多态概念🌸
💦多态:不同对象执行同一方法产生出不同结果。
💦比如:狗狗吃饭和猫咪吃饭,同样吃饭,狗狗吃狗粮,猫咪吃猫粮,这也是多态
🌸二.多态实现条件🌸
💦三要素: 🌼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);
    }
}
🌼运行结果🌼
🌸三.重写和重载🌸
💦重写:方法名不变、参数不变、返回类型不变、内容随意(除了内容,其他和父类保持一致
💦重载:方法名不变、参数必须改变、返回类型可以改变、内容随意
💦可以参考下图
🌸四.转型🌸
🍎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(); //两者运行结果相同
    }
}

💦值得注意的是:向上转型之后就不能调用了子类Dog特有的bark方法了
🍎2.向下转型🍎
💦向下转型用到的方法是强制类型转换
💦我们来看一个实例
🌳1.instanceof关键字🌳
📚作用:判断是否成功向下转型
📚格式:对象名 + 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("三角形"); } }
🌼选择语句实现🌼
🌼多态实现🌼
🌸六.重写方法的调用🌸
📚我们来看一下面的坑爹例子
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(); } }🌼运行结果和分析🌼
🌼 温馨提示🌼
🌼尽量不要在构造方法中调用其他方法🌼
🧡🧡🧡🧡🧡🧡🧡🧡🧡
🧡🧡🧡以上就是这篇文章的所有内容了🧡🧡🧡
🧡🧡🧡谢谢阅读本文,希望你能从中获得一些启发和思考 🧡🧡🧡
🌸三.结语+美图分享🌸

✨🎆谢谢你的阅读和耐心!祝愿你在编程的道路上取得更多的成功与喜悦!"🎆✨🎄
⭐️点赞收藏加关注,学习知识不迷路⭐️
🎉✔️💪🎉✔️💪🎉✔️💪🎉✔️💪🎉
👍😏⛳️ 点赞☀️收藏 ⭐️ 关注!😏👍
👍😏⛳️ 点赞☀️收藏 ⭐️ 关注!😏👍
👍😏⛳️ 点赞☀️收藏 ⭐️ 关注!😏👍
🙆♂️🙆♂️🙆♂️🙆♂️🙆♂️🙆♂️🙆♂️🙆♂️🙆♂️🙆♂️🙆♂️🙆♂️🙆♂️
























