day08接口多态

	//extends只能继承一个类
    //当一个抽象类没有属性,只有抽象方法,可以改写为interface(接口)

    //一个类可以实现无数个接口



    //接口和抽象类区别
    //(实现接口和继承父类)
    //1.Java只能继承一个父类,但是可以实现无数个接口
    //2.继承更多的表示归属关系,接口表示可以支持的功能

//接口只有强制实行的抽象方法
public interface Shape {
     double length();
     double area();

}
import java.io.Serializable;
//多个接口用","隔开
public class Round implements Shape, Serializable {


    @Override
    public double length() {
        return 0;
    }

    @Override
    public double area() {
        return 0;
    }
}

父类

public  abstract class Animal {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public  abstract void bark();
    public  abstract void eat();
}

两个子类(Cat,Dog)

public class Cat extends Animal {
//抽象类的子类强制全部重写父类方法
    @Override
    public void bark() {
        System.out.println(getName()+"喵");
    }

    @Override
    public void eat() {

    }
    public  void catchMouse(){
        System.out.println("抓老鼠");
    }
}

public class Dog extends Animal {
    @Override
    public void bark() {
        System.out.println("汪汪");
    }

    @Override
    public void eat() {

    }
}
    //创建一个数组既能装猫也能装狗(用爸爸声明的数组可以装各种儿子的对象)

    //多态
    //1--父类的变量可以引用子类对象
    //2--接口类型的变量也可以引用实现类的对象


    //多态增强代码的兼容性
    //多态应用
    //方法参数和返回值可以用父类和子类的对象Object
public class MainClass {
    public static void main(String[] args) {
        
        //猫的数组
        Cat [] cats=new Cat[3];
        Cat cat1 = new Cat();
        Cat cat2 = new Cat();
        Cat cat3 = new Cat();
        cat1.setName("十一");
        cat2.setName("十五");
        cat3.setName("初一");
        cat1.bark();

        cats[0]=cat1;
        cats[1]=cat2;
        cats[2]=cat3;
        //遍历数组
        for (int i=0;i<cats.length;i++){
            System.out.println(cats[i].getName());
        }


        Shape round =  new Round();//接口变量引用实现类对象


        Animal a=new Dog();//多态  父类变量引用子类对象


        Animal[]animals=new Animal[5];
        Dog dog1 = new Dog();
        Dog dog2 = new Dog();
        dog1.setName("dog1");
        dog2.setName("dog2");

        animals[0]=cat1;
        animals[1]=cat2;
        animals[2]=cat3;
        animals[3]=dog1;
        animals[4]=dog2;

        for (int i=0;i<animals.length;i++){
            System.out.println(animals[i].getName());
            animals[i].bark();


            //判断在多态情况下.某个对象是不是某个类创建的
            //instanceof
            if (animals[i] instanceof Cat){
                System.out.println("是一只猫");
                Cat t= (Cat) animals[i];//父类强转子类
                t.catchMouse();
            }
        }


    }
}

你可能感兴趣的:(Java基础)