多态的理解

来源:互联网 发布:oppo手机的mac地址 编辑:程序博客网 时间:2024/05/29 02:22

多态

1.对多态的理解:同一个对象不同时刻体现出来的不同状态
简单来说就是猫和狗都是动物,但他们又有许多不同,猫和狗是动物向下延伸的不同结果,这就是多态。
2.多态的前提:
A:有继承或者实现关系。
B:有方法重写。
C:有父类或者父接口引用指向子类对象。
3.多态的分类:
a:具体类多态

    class Fu {}                class Zi extends Fu {}                Fu f = new Zi();
        b:抽象类多态
    abstract class Fu {}                class Zi extends Fu {}                Fu f = new Zi();
        c:接口多态
interface Fu {}                Fu f = new Zi();

4.多态中的成员访问特点
A:成员变量
编译看左边,运行看左边
B:构造方法
子类的构造都会默认访问父类构造(注:子类默认调用父类的无参构造,等于默认在子类的构造方法中有super();)
C:成员方法
编译看左边,运行看右边
D:静态方法
编译看左边,运行看左边

package com.lenovo.demo3;/** * 动物类 * @author Petrichor * */public class Animal {    int a = 10;public Animal() {        System.out.println("动物无参构造");    }public Animal(int a) {        System.out.println("动物有参构造");    }public void eat() {        System.out.println("动物吃东西");    }public void sleep() {        System.out.println("动物睡觉");    }public int getA() {        return a;    }public void setA(int a) {        this.a = a;    }}
package com.lenovo.demo3;/** * 猫类 * @author petrichor * */public class Cat extends Animal {    int a = 20;public Cat(int a) {        System.out.println("猫的有参构造");    }public Cat() {        super(5);        System.out.println("猫的无参构造");    }public void eat() {        System.out.println("猫吃鱼");    }public void sleep() {        super.sleep();        System.out.println("猫躺着睡");    }    public void fly(){        System.out.println("猫能飞?");    }   }
package com.lenovo.demo3;/** * 测试类 * @author Petrichor * */public class Tset {    public static void main(String[] args) {        // 多态        Animal cat = new Cat();        // 动物有参构造 猫的无参构造        cat.eat();// 猫吃鱼        cat.sleep();// 动物睡觉 猫躺着睡        // cat.fly();不能调用,Animal中没有fly方法        System.out.println(cat.a);// 10        System.out.println(cat.getA());// 10        cat.setA(30);        System.out.println(cat.getA());// 30        // 普通        Cat cat2 = new Cat(5);// 动物无参构造 猫的有参构造        cat2.fly();// 猫能飞?        System.out.println(cat2.a);// 20        System.out.println(cat2.getA());// 10        cat2.setA(40);        System.out.println(cat2.getA());// 40    }}

这个动物和猫类基本体现多态中成员变量、成员方法、构造方法的调用,可以看到当我们

Animal cat = new Cat();

调用的a是Animal类的。而当

Cat cat2 = new Cat(5);

调用的a是Cat类的。

5.多态的好处:
A:提高代码的维护性(继承体现)
B:提高代码的扩展性(多态体现)
6.多态的弊端:
父不能使用子的特有功能。
现象:
子可以当作父使用,父不能当作子使用。
7.多态中的转型
A:向上转型
从子到父
B:向下转型
从父到子

原创粉丝点击