先编写一个Animal类和一个Food类,在里面用私有属性对名字进行封装,给他set和get方法,给他构造器。分别写Cat和Dog类继承Animal类,再分别写Fish和Bone类继承Food类。
再编写一个主人类Master类,在主人类中给属性名,和构造器,同时编写方法feed(),其中这个feed()方法就会将对象的多态体现出来。最后编写测试类Test。直接上代码
动物类,狗类和猫类
public class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Dog extends Animal{
public Dog(String name) {
super(name);
}
}
public class Cat extends Animal{
public Cat(String name) {
super(name);
}
}
食物类,鱼和骨头
public class Food {
private String name;
public Food(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Fish extends Food{
public Fish(String name) {
super(name);
}
}
public class Bone extends Food{
public Bone(String name) {
super(name);
}
}
主人类Master和测试类Test
public class Test {
public static void main(String[] args) {
Master ming = new Master("小明");
Cat cat = new Cat("小猫");
Fish fish = new Fish("鱼肉");
ming.feed(cat,fish);
Dog huang = new Dog("小黄");
Bone bone = new Bone("骨头");
ming.feed(huang,bone);
}
}
public class Master {
String name;
public Master(String name) {
this.name = name;
}
//这里体现了对象多态,因为new的对象都是Animal的子类和Food的子类,而我们在Test类中调用时我们
//只需要调用一个方法就能实现两个业务逻辑,不需要写两个方法分别完成。
public void feed(Animal animal,Food food){
System.out.println("主人"+name+"给"+animal.getName()+"吃"+food.getName());
}
}
运行结果如下
主人小明给小猫吃鱼肉
主人小明给小黄吃骨头
总结:
多态的前提是:两个对象(类)存在继承关系。多态首先是建立在继承的基础上的,先有继承才能有多态。多态是指不同的子类在继承父类后分别都重写覆盖了父类的方法,即父类同一个方法,在继承的子类中表现出不同的形式。多态成立的另一个条件是在创建子类时候必须使用父类new子类的方式。(即父类的应用指向子类的对象,俗称上转型)。