java 多态

来源:互联网 发布:淘宝会员怎么注册 编辑:程序博客网 时间:2024/06/03 20:45

多态:同一个对象(事物)在不同时刻体现出来的不同状态。
多态的前提:1、有继承或实现关系;2、有方法重写;3、有父类引用指向子类对象 父 F = new 子()


多态的分类:
1、具体类多态
    class Fu{}
    class Zi extends Fu{}
    Fu f = new Zi();
2、抽象类多态
    abstract class Fu{}
    class Zi extends Fu{}
    Fu f = new Zi();
3、接口多态
    interface Fu{}
    class Zi implements Fu{}
    Fu f = new Zi();


多态中成员的访问特点:
1、成员变量:决定于父类。(调用父类中不存在而子类中存在的成员变量,则会出错)
2、构造方法:先访问父类,后访问子类。(因为子类是继承父类的,所以创建子类对象的时候会先去初始化父类的数据)
3、成员方法:决定于子类。(调用父类中不存在,子类中存在的方法则会报错)
4、静态方法:决定于父类。
因为只有成员方法存在方法重写,所以它在运行时决定于子类中对应的方法。

class Animal{    public int sum = 10;    public void show(){        System.out.println("show Animal");    }    public static void info(){        System.out.println("info Animal");    }}class Dog extends Animal{    public int sum = 5;    public int age = 20;    public void show(){        System.out.println("show Dog");    }       public void method(){        System.out.println("method Dog");    }       public static void info(){        System.out.println("info Dog");    }}public class Test {    public static void main(String[] args) {        Animal a = new Dog();           System.out.println(a.sum);  //100。成员变量不存在覆盖,所以访问的是父类中的变量            a.show();               //成员方法存在重写,所以父类中的方法会被子类中的方法覆盖,所以访问的是子类中的方法            a.info();               //因为静态方法和类相关,算不上重写,所以访问的还是父类中的方法            //a.method();           //错误,因为父类中没有这个方法    }}

输出结果:

10show Doginfo Animal

多态的好处?
1、提高代码的维护性(继承体现)
2、提高代码的扩展性(多态体现)


多态的弊端?
父不能使用子的特有功能。子可以当做父使用,父不能当作子使用


原创粉丝点击