多态的概述
1.多态 是继封装、继承之后,面向对象的第三大特性
2.多态是同一个行为具有多个不同表现形式或形态的能力。
3.多态就是同一个接口,使用不同的实例而执行不同操作。
4.日常生活中的事物也经常会体现出多种形态,比如NBA球星欧文,篮球运动员是人的一种,则欧文既是篮球运动员也是人,同时他也是耐克运动品牌的代言人等等,即出现了多种形态。
5.Java作为面向对象的语言,同样可以描述一个事物的多种形态。多态意味着父类型的变量可以引用子类型的对象。
6.方法可以在父类中定义而在子类中重写。 前提条件:必须有子父类关系。
多态的定义与使用格式
7.定义格式:父类类型 变量名=new 子类类型();
其中父类类型是声明类型,子类类型是实际类型。
多态的实现
1.实现条件
Java实现多态有三个必要条件:继承、重写、向上转型。
(1)继承:在多态中必须存在有继承关系的子类和父类。
(2)重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
(3)向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。
只有满足了上述三个条件,我们才能够在同一个继承结构中使用统一的逻辑实现代码处理不同的对象,从而达到执行不同的行为。
2.实现形式
(1)普通类多态定义的格式
父类 变量名 = new 子类();
class Team {}
class Wang extends Team {}
//类的多态使用
Team xx = new Wang();
(2) 抽象类多态定义的格式
abstract class Team {
public abstract void method();
}
class Wang extends Team {
public void method(){
System.out.println(“重写父类抽象方法”);
}
}
//类的多态使用
Team xx = new Wang();
(3)接口多态定义的格式
interface Team {
public abstract void method();
}
class Wang implements Team {
public void method(){
System.out.println(“重写接口抽象方法”);
}
}
//接口的多态使用
Team xx = new Wang();
多态案例
以下通过NBA球星球衣销售的例子让你更加了解多态
package NBA;
//球星球衣接口
interface Basketballstar{
String getName();
int getPrice();
}
//欧文
class Irving implements Basketballstar{
public String getName(){
return "Irving";
}
public int getPrice(){
return 409;
}
}
//杜兰特
class Durant implements Basketballstar{
public String getName(){
return "Durant";
}
public int getPrice(){
return 359;
}
}
//球星球衣销售店
public class Store{
private int money = 0;
//每卖一件球衣
public void sell(Basketballstar shirt){
System.out.println("球星: " + shirt.getName() + "单价: " + shirt.getPrice());
money += shirt.getPrice();
}
//总收入
public int getMoney(){
return money;
}
public static void main(String[] args){
Store shop = new Store();
shop.sell(new Irving());
shop.sell(new Durant());
System.out.println("总收入: " + shop.getMoney());
}
}
运行结果:
在上面这个例子中,只需让新定义的类实现Basketballstar类并实现它的所有方法,而无需对原有代码做任何修改。
继承是多态得以实现的基础,从字面上理解,多态就是一种(Basketballstar类型)表现出多种状态
相信借助这个例子,你会对多态有更多的理解