多态
面向对象的三大特性:封装、继承、多态
一. 多态的定义
指同一个行为,在不同对象上表现出不同的实现效果。
简单概括:同一接口,不同实现;父类引用指向子类对象,调用方法时执行子类重写后的逻辑。
二.实现多态的三大必要前提
存在继承 / 实现关系:子类继承父类,或类实现接口;
方法重写(override):子类重写父类的同名方法;
父类引用指向子类对象:父类 变量 = new 子类();
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。
多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。
三.Java中没有虚函数
虚函数的存在是为了多态。
Java 中其实没有虚函数的概念,它的普通函数就相当于 C++ 的虚函数,动态绑定是Java的默认行为。如果 Java 中不希望某个函数具有虚函数特性,可以加上 final 关键字变成非虚函数。
四. 多态的Demo
基类:Animal.java
public abstract class Animal {
public void eat(){
System.out.println("Animal 正在吃");
}
public void sleep(){
System.out.println("Animal正在睡");
}
public void introduction() {
System.out.println("大家好!我是Animal");
}
}
子类:1:Penguin.java
public class Penguin extends Animal {
public void eat(){
System.out.println("企鹅 正在吃");
}
public void sleep(){
System.out.println("企鹅正在睡");
}
public void introduction() {
System.out.println("大家好!我是企鹅");
}
}
子类2:mouse.java
public class mouse extends Animal {
public void eat(){
System.out.println("QQ 正在吃");
}
public void sleep(){
System.out.println("QQ正在睡");
}
public void introduction() {
System.out.println("大家好!我是QQ");
}
}
测试类:Main.java
public class Main {
public static void main(String[] args) {
Animal animal = new Penguin();
animal.eat();
}
}
浙公网安备 33010602011771号