多态

父类型可以指向子类型对象
多态可以降低系统的耦合性
除了父类型可以指向子类型,还可以实现的接口指向对象
  
  Biology biology  = new Cat();              //Cat实例化了接口Biology

缺点:如果使用父类型或者接口 指向子类型或者实现类    ,    那么引用只能调用父类型的方法或者接口中定义的方法
    解决方法:向下类型转换,(要判断对象的类型,用instanceof 来了解animal instanceof Dog:)
        
if( animal instanceof Dog){
     Dog dog = (Dog) animal;
     dog.jiao();         
}
if( animal instanceof Cat){
           Cat cat = (Cat) animal;
           cat.jiao();         
}
if( animal instanceof Snake){
           Snake snake = (Snake) animal;
           snake.jiao();         
}


多态成员访问的特点:
成员变量:
    编译看左边(父类),运行看左边(父类)
成员方法:
    编译看左边(父类),运行看右边(子类),动态绑定
静态方法:
    编译看左边(父类),运行看左边(父类)
只有非静态的成员方法(=成员方法):
    编译看左边(父类),运行看右边(子类)

多态的弊端:
    不能使用子类特有的成员属性和子类特有的成员方法(具体解决方法:上述代码块)

多态存在的三个必要条件:
    1.继承
    2.父类应用指向子类对象
    3.重写方法(注意,只是方法,如果在子类中重写了父类的变量,那么在编译时会报错)

  •     当使用多态方式调用方法时,首先检车父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法

以下是使用多态的例子
public class Test{
    public static void main(String args[]){
        
        Animal dog = new Dog();
        Animal cat = new Cat();
        dog.eat();
        Dog d = (Dog)dog;
        d.work();
        cat.eat();
        Cat c = (Cat)cat;
        c.work();        

        public void show(Animal a){
            if(a intenceof Dog){
                Dog d = (Dog)a;
                              d.work();
            }else if(a intenceof Cat){
                Cat c = (Cat)cat;
                               c.work();
            }
        }
    }
}

Interface Animal{
    abstract void eat();
}

class Dog implements Animal{
    public void eat(){
        System.out.println("狗吃骨头");
    }
    public void work(){
        System.out.println("狗看家");
    }
}

class Cat implements Animal{
    public void eat(){
        System.out.println("猫吃鱼");
    }
    public vodi work(){
        System.out.println("猫抓耗子");
    }
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值