多态

多态

  • 编译(看变量类型)时和运行(看对象)时调用的方法不一样——多态——多种行为状态

  • 允许将子类类型的指针赋值给父类类型的指针。

  • 多态的特点
    A、编译时和运行时的变量类型不一致
    B、编译时调用的父类方法已经被子类重写
    C、形式:父类类名 创建的子类对象名= new 子类类名();

  • 上转型对象:父类中的对象指向子类中的对象,子类对象向上转型
    特点:上转型对象不能调用子类“新增”(创建对象之后新增)的属性(成员变量)和方法
    如果子类中成员变量名和父类中成员变量名一致,则上转型变量调用的时父类的
    上转型对象如果要调用“新增”的属性和方法,则必须向下转型
    只有上转型变量才能向下转型

  • 向下转型形式(参考强制变量类型转换):子类类名 下转型变量名(新的变量) = (子类类名)上转型变量名
    向下转型创建了一个新的变量,但是不开辟新的空间

public class Mammal {
    public void move() {
        System.out.println("It's moving");
    }
}

public class bat extends Mammal {
    public void move() {
        System.out.println("Bat is moving");
    }
    public void more() {
        System.out.println("more");
    }
}

public class Test {
    public static void main(String[] args) {
        bat b= new bat();
        b.move();//编译时变量为子类类型,所以编译时调用子类的move方法;运行时,执行bat指向的对象
        Mammal up =new bat();//父类类型变量=子类创建的对象 
        up.move();
        //编译时变量为父类类型,所以编译时调用父类中的move方法;
        //运行时,mammal变量指向子类创建的对象,所以运行时调用的是子类的move方法
        //编译时和运行时调用的方法不一致,多态,即多种行为状态
        
        //ma.more();//上转型变量调用子类中新增的属性和方法,会报错
        
        bat down = (bat)up;//向下转型
        down.more();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值