多态
多态的抽象理解
比如一个“人类” 人类有一个行为是休息, 一个“男人”一个“女人”,男人有一个休息方法是发游戏,女人也有一个休息方法是买买买
从代码角度理解
- “人类”是一个父类
- 人类有一个“休息”方法 放松
- “男人”子类继承于人类
- 男人有一个“休息”方法是“打游戏”
- “女人”子类继承于人类
- 女人有一个“休息”方法是“买买买”
那么多态就是
- 同一方法可以根据对象的不同而采用多种不同的行为方式。
- 一个对象的实际类型是确定的,但可以指向的引用类型有很多(例如父类 或者是长辈类)
多态存在的前提
- 有继承关系
- 子类重写了父类的方法
- 父类引用类型指向子类对象
注意点
- 多态是方法的多态,属性没有多态。
- static静态方法 final常量 private私有方法不能被重写,无法满足多态的前提
代码实例
//Person父类
public class Person {
String name;
public void rest(){
System.out.println("放松");
}
}
//--------------------------------
//Man子类
public class Man extends Person{
public void rest(){
System.out.println("打游戏");
}public void in(){
System.out.println("男in");
}
}
//--------------------------------
//Woman子类
public class Woman extends Person{
public void rest(){
System.out.println("买买买");
}
public void in(){
System.out.println("女in");
}
}
//--------------------------------
//测试类
public class Application {
public static void main(String[]args){
//创建一个男人对象叫小明
Man xm=new Man();
//调动小明的休息方法
xm.rest();//打游戏
//创建一个女人对象叫小红
Woman xh=new Woman();
//调动小红的休息方法
xh.rest();//买买买
//----------------------
//那么我们利用多态来分别使用小明和小红的休息方法
//person引用类型指向男人对象创建一个小明2
Person xm2=new Man();
//调用小明2休息方法
xm2.rest();//打游戏
//person引用类型指向女人对象创建一个小明2
Person xh2=new Woman();
//调用小明2休息方法
xh2.rest();//买买买
//-------------------------
//当父类中没有in方法时 子类中有时
xm2.in();//会直接报错找不到in方法
//如果需要在父类指向子类对象,创建的实例对象使用父类没有的方法需要强制转换
((Man)xm2).in();
}
}