概述
同一个引用类型使用不同的实例而执行不同的操作,即父类引用子类的对象。
必要条件
- 必须要有继承关系
- 有方法的重写
- 运行时使用父类应用指向子类对象。
优缺点
优点:
1.消除类型之间的耦合关系
2.可替换性
3.可扩充性
4.接口性
5.灵活性
6.简化性
缺点:
1.不能使用子类的特有功能
多态访问成员的特点
1.访问成员:编译看左边,如果左边没有该变量,编译报错。运行看左边,左边类中的变量值就是运行结果。(编译看左边,执行看左边)
public class Test {
public static void main(String[] args) {
Fu f = new Zi();
System.out.println(f.age);
}
}
class Fu{
int age = 10;
}
class Zi extends Fu{
int age = 20;
}
// 结果为10;
2.成员方法:编译看左边,执行看右边。
public class Test {
public static void main(String[] args) {
Fu f = new Zi();
f.print();
}
}
class Fu{
public void print(){
System.out.println("父类成员方法");
}
}
class Zi extends Fu{
public void print(){
System.out.println("子类成员方法");
}
}
//结果为:子类成员方法;
3.静态方法:(编译看左边,执行看右边)
public class Test {
public static void main(String[] args) {
Fu f = new Zi();
f.print();
}
}
class Fu{
public static void print(){
System.out.println("父类成员方法");
}
}
class Zi extends Fu{
public static void print(){
System.out.println("子类成员方法");
}
}
//结果为:父类成员方法;
多态的转型
向上转型:
- 格式:
<父类型><引用变量名> =new <子类型>();
Fu f = new Zi();
- 通过父类引用变量调用的成员方法是子类重写或继承父类的方法。
- 通过父类引用无法调用子类所特有的方法和属性。
向下转型
- 格式:
<子类型><引用变量名> =( <子类型>)<父类型>;
Zi z = (Zi) f;
- 在向下转型的过程中,如果没有转成真实子类型,会出现类型转换异常。
instanceof关键字
测试左边对象是不是右边类的实例,返回boolean类型值。
(通常会和向下转型一起用)
if ( f instanceof Zi){...}
以上