//main入口函数 public class MainClass { public static void main(String[] args) { //new是Cat永远都是Cat类型,但若使用父类Animal接收的,那么就无法调用子类Cat的特有方法 //想调用必须要强转:父类转子类 Animal duoduo=new Cat("duoduo",10,"花色"); Cat cc=new Cat("biubiu",2,"灰白"); cc.say("miaomiao"); Dog dd = new Dog("小狗",5,"黑色"); dd.say("wangwang"); //存cat和dog的数组的类型只能是Animal Animal[] a={duoduo,cc,dd}; cc.catchMouse("不比较"); // Cat duoduo2=(Cat)duoduo; // duoduo2.catchMouse("duoduo2"); //若没有上面一行转型,则duoduo2不会有catchMouse()方法,尽管他是Cat类型 for(Animal each:a){ if (each instanceof Cat){//比较数组中元素类型是否为Cat Cat c1=(Cat)each; c1.catchMouse("Tom猫"); } } } }
//父类Animal
import javax.swing.*; public class Animal { private String name; private int age; private String color; public Animal(){}; public Animal(String name,int age,String color){ this.age = age; this.name = name; this.color = color; } public void say(String something){ System.out.println(name+"的叫声是"+something); } @Override public String toString() { return "Animal{" + "name='" + name + '\'' + ", age=" + age + ", color='" + color + '\'' + '}'; } public int getAge() { return age; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
//子类1:Cat类
public class Cat extends Animal{ public Cat(){} public Cat(String name,int age,String color){ super(name, age, color); } public void catchMouse(String name){ System.out.println(name+"捉老鼠"); } }
//子类2:Dog
public class Dog extends Animal{ public Dog(){} public Dog(String name,int age,String color){ super(name, age, color); } public void waveTail(String name){ System.out.println(name+"在摇尾巴"); } }
运行结果:
biubiu的叫声是miaomiao
小狗的叫声是wangwang
不比较捉老鼠
Tom猫捉老鼠
Tom猫捉老鼠