多态的详解

概述

同一个引用类型使用不同的实例而执行不同的操作,即父类引用子类的对象。

必要条件

  • 必须要有继承关系
  • 有方法的重写
  • 运行时使用父类应用指向子类对象。

优缺点

优点:

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){...}

以上

猜你喜欢

转载自www.cnblogs.com/fzxey/p/10747316.html
今日推荐