多态的概念:字面解释就是一个事物的多种形态。比如水可以是气体可以是液体。
Java中的方法,对象也都有多态的体现。
Java中的多态有两种体现,方法的重载和重写。
下面介绍多态的定义和使用
1.方法的重载体现多态
public class Student {
public static void main(String[] args) {
// 多态:同一个调用,作用于不同对象
// 首先介绍方法重载如何体现多态,println是jdk自带的方法
// 可以看出是同一个方法println调用了不同的数据类型的方法,这就是多态的体现
System.out.println(1234);
System.out.println("Susan");
System.out.println(true);
}
}
2.方法的重写体现多态
在王者荣耀游戏中,有很多不同职位的英雄,比如法师,战士,辅助等。
首先我们定义一个人物类作为父类
public class Figure { public String name; public void attack(){ // 由于不同英雄的攻击方式不一样,所以方法体先空着 } public void run(){ System.out.println("英雄在奔跑"); } }
再定义一个战士类继承人物类
public class Fighter extends Figure{
// 战士类
// 重写Figure父类的方法
// attack相当于抽象出来共有的方法
public void attack(){
// this指对象父类,对象点属性名的表达
System.out.println(this.name+"正在进行物理攻击");
}
}
以此类推,定义一个法师类继承人物类
//法师类 public class Master extends Figure{ public void attack(){ System.out.println(this.name+"正在进行魔法攻击"); } }
在最后的测试阶段
public class Test {
public static void main(String[] args) {
// 由于父类的指向范围更大,我们可以用父类引用名指向具体的子类引用名
Figure figure1 = new Fighter();
figure1.name="马超";
// 由于我们的父类方法体为空,所以这里是调用的子类方法
figure1.attack();
// 在这里的理解是,父类指向子类。
/* 比如蛇是爬行动物,我们可以用
Paxing paxing1 = new Snack();
理解就是,蛇的父类就是爬行动物
*/
Figure figure2 = new Master();
figure2.name="王昭君";
figure2.attack();
//如果在使用子类对象过程中,不知道自己使用的是哪个对象,可以使用 instance of进行判断
if (figure2 instanceof Master){
System.out.println("figure2这是一个法师对象");
}else
System.out.println("figure2这是一个战士对象");
}
}
总结:多态的使用能够大大提高程序的灵活性和设计的扩展性
控制台运行结果: