面向对象7:多态
1.多态 1.1多态:一个失误的多种形态 1.2多态的表现 行为(方法)多态:重写和重载 引用多态(动态绑定):编译时的类型和运行时不一致的这种现象 动态绑定 注意:引用多态存在继承关系 自动类型转换 char c=10; int a=c; 强制类型转换 int a=10; char c=(char)a; 向上转型 父类=子类; Pet p = new Dog(); 向下转型 子类 =(子类)父类; Dog d=(Dog) p; 注意:java.lang.ClassCastException:类型转换异常 父类的运行时类型跟要转成的子类的类型不一致 1.3 多态【子类就是父类】 为什么使用多态: 提高程序可扩展性,可维护性,提高代码可重用性 什么是多态: 具有表现多种形态能力的特征 同一个实现接口,使用不同的实例而执行不同的操作
1.4实现多态的两种形式:
a.使用父类作为方法形参实现多态
public void play(F p){...};
b.使用父类作为方法返回值实现多态
public F getF(int type){...};
//子类,圆形 public class Circular extends Graph { private final double X=3.14; //半径 public Circular(double r){ super(r); } public void getArea(){ double m=(super.getLen()*X*X); System.out.println("圆的半径为"+super.getLen()+"\n面积为"+m); } //子类,长方形 public class Rectangle extends Graph { private double weight; //宽度 public Rectangle(double len,double weight){ super(len); this.weight=weight; } public double getWeight(){ return weight; } public void getArea(){ double m=(super.getLen()*this.getWeight()); System.out.println("长方形的长为"+super.getLen()+",宽为"+this.weight+"\n面积为"+m); } //父类 public abstract class Graph { private double len; //图形的边长 public Graph(double len){ this.len=len; } //获取长度 public double getLen(){ return len; } //抽象面向方法 public abstract void getArea(); }