5.多态

1.多态的定义:

        同一个对象,在不同时刻,表现出来的不同状态--------父类(接口)引用指向子类(实现类)对象

2.多态的前提条件:

        A.有继承或者实现关系

        B.有方法的重写

3.多态中的成员使用特点:

        Fu fz=new Zi();

        多态时,所有的表现形式都是父类的表现形式;

        只有调用方法时,运行的是子类重写的方法

        A:成员变量

                编译看左边,运行看左边

        B:成员方法

                编译看左边,运行看右边

           class Fu {
int num=4;
void show() {
System.out.println("showFu");
    }
}
    class Zi extends Fu {
    int num=5;
    void show() {
    System.out.println("showZi");
    }
    }
    class Test {
public static void main(String[] args) {
    Fu f=new Zi();
    System.out.println(f.num);  
    f.show();
    }

                运行结果是: 4----showZi

4.多态的利弊

    A.利:提高了程序的可维护性和可扩展性

    B.弊:不能使用子类特有方法,除非向下转型

5.多态中的转型

    A:向上转型

把子类对象赋值给父类(接口)的引用  自动类型提升  

        int a = 0; 

        double b =a;

        Fu fz = new Zi();

    B:向下转型

        把父类(接口)的引用强制转换成子类对象

        double b = 10.0;

        int a = (int)b;

        Fu  fz = new Zi();

        Zi  zf = (Zi)fz;

        注意:Fu fu = new Fu() 不能向下转型  会报ClassCastException 类型转换异常

6.多态的三种形式

    A.具体类的多态 ------父类 变量名 = new 子类();

    B.抽象类的多态-------父抽象类  变量名 = new 子类();

    C.接口的多态---------接口 变量名 = new 实现类();

7.instanceof关键字

    格式:    对象名 instanceof 类名

    返回值:true,false

    作用:判断指定的对象,是否为给定类创建的对象

    Animal  a1 = new Cat();

    Animal  a2 = new Dog();

    method(a1);

    public  static void method(Animal  a){

        if(a instanceof Cat){

            向下转型

            调用猫特有方法

        }

    }


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值