🙉专栏推荐: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(); } }
🌼运行结果和分析🌼
🌼 温馨提示🌼
🌼尽量不要在构造方法中调用其他方法🌼
🧡🧡🧡🧡🧡🧡🧡🧡🧡
🧡🧡🧡以上就是这篇文章的所有内容了🧡🧡🧡
🧡🧡🧡谢谢阅读本文,希望你能从中获得一些启发和思考 🧡🧡🧡
🌸三.结语+美图分享🌸
✨🎆谢谢你的阅读和耐心!祝愿你在编程的道路上取得更多的成功与喜悦!"🎆✨🎄
⭐️点赞收藏加关注,学习知识不迷路⭐️
🎉✔️💪🎉✔️💪🎉✔️💪🎉✔️💪🎉
👍😏⛳️ 点赞
☀️收藏
⭐️ 关注
!😏👍
👍😏⛳️ 点赞
☀️收藏
⭐️ 关注
!😏👍
👍😏⛳️ 点赞
☀️收藏
⭐️ 关注
!😏👍
🙆♂️🙆♂️🙆♂️🙆♂️🙆♂️🙆♂️🙆♂️🙆♂️🙆♂️🙆♂️🙆♂️🙆♂️🙆♂️