怕什么真理无穷

导航

关于多态的简单理解

interface Animal{//接口,父类
    void shout();
}
//用不同的方式来实现接口
class Cat implements Animal{//实现接口,子类
    public void shout(){
        System.out.println("猫叫,miao miao miao miao miao");
    }
}
class Dog implements Animal{//实现接口,子类
    public void shout(){
        System.out.println("狗叫,wang wang wang wang wang");        
    }
}

public class Example20{
    public static void main(String[] args){
        Animal an1=new Cat(); //Animal是父类型,Cat是子类型,父类型的变量引用子类型的对象,根据子类型的特征不同,会得到不同的执行结果
        Animal an2=new Dog();//在同一个方法中,这种由于参数类型不同而导致执行效果不同的现象就是多态
        animalShout(an1);
        animalShout(an2);
    }
    public static void animalShout(Animal an){ //定义animalShout方法接收传入的参数,类型为Animal
    an.shout();//调用实际参数的shout方法,这里的shout是Cat和Dog中的shout,Animal是抽象类不支持调用
    }
}
//Animal an1=new Cat() 将Cat对象当作Animal类型来使用,将子类对象当作父类类型使用不需要显式的声明
//重温下对象的含义:定义一个Animal类型的变量an1,并且将对象Cat赋值给an1,一般创建A对象,变量类型为A,但也可以创建B对象(B是A的子类),变量类型为A

 

//数据类型的转换
interface Animal{
    void shout();
}

class Cat implements Animal{
    public void shout(){
        System.out.println("miao miao");
    }
    void sleep(){//在实例了父类中已有方法后,子类增加了一个方法
        System.out.println("cat sleep……");
    }
}

class Dog implements Animal{
    public void shout(){
        System.out.println("wang wang");
    }
}

public class Example21{
    public static void main(String[] args){
        Cat cat=new Cat();
        Dog dog=new Dog();
        animalShout(cat);
        animalShout(dog);//如果这里不传入cat,而是传入一个其他类型,后面的强制转换将无法进行,系统会报错,可以用instanceof来加以判断
    }//(强制转换是有条件的,比如这里,animal父类可以强制转换为cat子类,但Dog是无法强制转换为Cat的)
    //public static void animalShout (Animal animal){
    //    animal.shout();
    //    animal.sleep();//如此是不能调用的,因为类型不符,因为Animal父项类型中并没有sleep方法,如上的animal.shout()是可以的,因此如下,要进行类型转换
    //}
    
    public static void animalShout (Animal animal){ //定义传入的参数为Animal类型
    if(animal instanceof Cat){//判断传入的参数无法进行强制转换时,友好提示
        Cat cat =(Cat) animal; // 将animal参数强制转换为Cat类型,因为在Cat类中,有sleep这个方法,因此后边的sleep得以调用
        cat.shout();
        cat.sleep();
    }else{
        System.out.println("this animal is not a cat");
    }
    }
}

 

posted on 2021-01-31 23:01  惭愧书生  阅读(173)  评论(0编辑  收藏  举报