package com.company;
interface Animal{
void shout();
}
class Cat implements Animal{
public void shout(){
System.out.println("喵喵喵");
}
public void sleep(){
System.out.println("猫咪要睡觉");
}
}
class Dog implements Animal{
public void shout(){
System.out.println("汪汪汪");
}
void sleep(){
System.out.println("狗狗要睡觉");
}
}
public class 静态类 {
public static void main(String[] agrs){
Cat cat = new Cat();
Animal dog = new Dog();
animalShout(cat);
animalShout(dog);
}
public static void animalShout(Animal animal){
if (animal instanceof Cat){
Cat cat =(Cat) animal;
cat.shout();
cat.sleep();
}else {
Dog dog = (Dog) animal;
dog.shout();
dog.sleep();
}
}
}
多态就是将不同类的相同对象,做成一个固定的对象然后引入不同的实例对象得到的不同的结果。
代码详解:
首先创建了Animal接口里面有一个抽象的shout对象
定义了两个类(dog cat)引用了Animal接口。
dog和cat类分别使用了父类Animal的shout对象,又自己创建了一个sleep对象。
主函数创建了一个 公共 静态的animalShout方法里面 用instanceof判断了一下,如果是猫类,那么将会将传参强行转为猫类,如果是狗就是转为狗类。
这里说一下为什么要判断 为什么要创建实例:
如果不创建实例的话虽然能调用接口父类的shout();,但是不能调用子类独有的sleep()方法。
判断的话是用来判断传参入的是什么类好可以,创建什么实例。