这里是Themberfue
本章讲的是Java三大特性之一的多态,也是最后一个特性
多态概念
既然我们要学习多态,首先得知道这玩意儿到底是个什么东西?
通俗地说,多态其实就是多种形态。具体来说就是去完成某个行为,当不同的对象去完成时呈现出不同的状态。
多态的实现
说完了多态的概念,那它如何实现和使用呢?
在Java中实现多态,必须要满足以下条件,缺一不可。
1. 必须在继承体系下
2. 子类必须要对父类中方法进行重写
3. 通过父类的引用调用重写的方法
在Java的世界里,多态性是一场魔法秀,父类引用变身为子类对象,就像变魔术一样。当你用父类的引用调用一个重写的方法时,就像魔术师一挥手,舞台上的兔子变成了鸽子,实际调用的是子类的版本。这就是多态的神奇之处,编译时它假装是父类,但运行时却露出了子类的真面目。就像是在说:“嘿,我可能看起来像你爸爸,但我其实是你!”。
PS:上面这是AI写的,确实有点幽默了。
空讲没感觉,我们通过代码来看看
class Animal {
String name;
int age;
public Animal(String name, int age){
this.name = name;
this.age = age;
}
public void eat(){
System.out.println(name + "吃饭");
}
}
class Cat extends Animal{
public Cat(String name, int age){
super(name, age);
}
@Override
public void eat(){
System.out.println(name+"吃鱼~~~");
}
}
class Dog extends Animal {
public Dog(String name, int age){
super(name, age);
}
@Override
public void eat(){
System.out.println(name+"吃骨头~~~");
}
}
这段代码主要创建了三个类 ,分别是Animal类,Cat类以及Dog类,其中Cat类和Dog类都继承了Animal类,所以Animal类的成员属性和成员方法都会继承过来。
但是Cat类和Dog类都重写了eat方法,那么当我们通过实例化这些类时,调用这些方法会发生什么呢?我们来看下面这个代码
public class Main {
public static void main(String[] args) {
Cat cat = new Cat("元宝",2);
Dog dog = new Dog("小七", 1);
eat(cat);
eat(dog);
}
public static void eat(Animal a){
a.eat();
}
}
结合上面的代码运行起来后,其结果如下 :
元宝吃鱼~~~
元宝正在睡觉
小七吃骨头~~~
小七正在睡觉
在上述代码中, 上方的代码是 类的实现者 编写的, 下方的代码是 类的调用者 编写的。
当类的调用者在编写 eat 这个方法的时候, 参数类型为 Animal (父类), 此时在该方法内部并不知道, 也不关注当前的 a 引用指向的是哪个类型(哪个子类)的实例. 此时 a这个引用调用 eat方法可能会有多种不同的表现(和 a 引用的实例 相关), 这种行为就称为 多态.
今天的内容就到这里啦,由于SE的内容不是那么难,所以我决定今天就完结SE了,明天开始数据结构?算法题讲解?MySQL?JavaEE?我也不清楚,看我心情吧,嗨嗨嗨。😍😍😍