1. 模拟业务:人养宠物--->养只狗
定义类:Person类,Dog类,Test测试类
Person.java
public class Person {
//喂养
public void feed(Dog d){
d.eat();
}
}
Dog.java
public class Dog {
public void eat(){
System.out.println("狗吃东西");
}
}
Test.java
public class Test {
public static void main(String[] args) {
Person p1 = new Person();
Dog d1 = new Dog();
p1.feed(d1);
}
}
结果:狗吃东西
2. 业务扩展:人养宠物---->再养只猫
扩展方式:扩展Person类,增加Cat类
Person.java
Person.java
public class Person {
//喂养
public void feed(Dog d){
d.eat();
}
//因为用户业务改变了,所以软件要升级
public void feed(Cat c){
c.eat();
}
}
Cat.java
Cat.java
public class Cat {
public void eat(){
System.out.println("猫吃东西");
}
}
Test.java
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Person p1 = new Person();
Dog d1 = new Dog();
Cat c1 = new Cat();
p1.feed(d1);
p1.feed(c1);
}
}
结果:狗吃东西
猫吃东西
结论:如果Person类要养别的宠物,Person类中代码要复写,扩展性太差。
3. 业务改进:使用多态
改进方式:定义Animal类,Dog类和Cat类等子类继承Animal类,改进Person类
Animal.java
public class Animal {
public void eat(){
}
}
Person.java
public class Person {
//改进,多态,尽量不要面向具体编程,面向抽象编程(面向父类型编程)
public void feed(Animal a){ //Animal a = d1;
a.eat();
}
}
Dog类继承Animal类
public class Dog extends Animal{
public void eat(){
System.out.println("狗吃东西");
}
}
Cat继承Animal类
public class Cat extends Animal{
public void eat(){
System.out.println("猫吃东西");
}
}
Test类
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Person p1 = new Person();
Dog d1 = new Dog();
Cat c1 = new Cat();
p1.feed(d1);
p1.feed(c1);
}
}
结果:狗吃东西
猫吃东西
结论:多态的好处
1. 降低代码之间的耦合度
2. 增强项目的扩展能力