Java 多态

Java的多态

多态规则(前提): 一种事物的多种形态
1. 类与类之间 要产生联系 继承关系
2. 要有方法的重写(没有方法的重写 多态的意义不大)
3. 核心: 父类引用(指针)指向子类空间(声明方式)
public static void main(String[] args) {
        // 本类的引用 指向本类对象的空间
        // Cat cat = new Cat();
        // 父类引用 指向 子类对象空间
        Animal a1 = new Cat();
        a1.speak();
        // 使用多态 来声明子类对象
        Animal a2 = new Dog();
        a2.speak();
    }
}

class Animal{
    String name; // 姓名
    String kind; // 种类
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getKind() {
        return kind;
    }
    public void setKind(String kind) {
        this.kind = kind;
    }
    // 叫
    public void speak() {
        System.out.println("我是动物叫出声");
    }
    // 介绍
    @Override
    public String toString() {
        return "姓名: " + name + " 种类: "+ kind;
    }
}
class Dog extends Animal{
    @Override
    public void speak() {
        System.out.println(" 汪汪汪 ");
    }
}
class Cat extends Animal{
    @Override
    public void speak() {
        System.out.println(" 喵喵喵 ");
    }

}

多态时 调用成员变量 和 调用成员方法

在内存中的表现

多态 调用成员变量 时
简单记 编译和运行 都看等号 左边
当使用父类引用 指向子类空间的时候
父类 的引用 只能访问到
子类空间中 属于 父类的那部分(super 访问的部分)
当本类引用 指向本类空间的时候
本类的引用 可以访问到 整个空间
public static void main(String[] args) {
        // 用多态的形式创建对象
        Father father = new Son();
        // System.out.println(father.num);
        /* 动态绑定
         * 编译时: 
         * 寻找父类中有没有该方法(看等号 左边)
         * 运行时:
         * 运行时 调用是子类中重写的方法
         * 
         * 简单记(编译看左边(看父类) 运行看右边(看子类))
         */ 
        father.print();

        /*
        Son s = new Son();
        System.out.println(s.num);
        */
    }


class Father{
    int num = 10;
    public void print() {
        System.out.println("我是 Father 类 的 print 方法");
    }
}

class Son extends Father{
    int num = 20;

    public void print() {
        System.out.println("我是 Son 类 的 print 方法");
    }

}

多态的弊端:

使用多态声明对象的时候 无法直接调用子类的特有方法
只能通过向下转型后 才能使用子类特有的方法

多态的好处:

1. 代码维护性强(这条建立在 继承的基础上)
2. 方法的扩展性强(核心好处)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值