00:00
1.1.1.多态的好处
生活中使用多态,可以指代更广泛的范围;
在Java中,使用多态,也可以使变量的表明范围更广泛,可以提高代码的复用性和程序的扩展性(降低耦合性);
需求:描述并测试猫和狗的行为;
猫具有吃、叫和抓老鼠的功能;
狗具有吃、叫和看家的功能;
过去的做法:
public classDemo2 {
public static voidmain(String[]args) {
//创建一只猫
Catc=newCat();
//调用函数测试猫的行为
test(c);
//创建一条狗
Dogd=newDog();
//调用函数测试狗的行为
test(d);
}
private static voidtest(Dogd) {
//测试狗的吃的行为
d.eat();
//测试狗叫的行为
d.say();
//测试狗看家的行为
d.lookHome();
}
private static voidtest(Catc) {
//测试猫吃的行为
c.eat();
//测试猫叫的行为
c.say();
//测试猫抓老鼠的行为
c.catchMouse();
}
}
/*
需求:描述并测试猫和狗的行为;
猫具有吃、叫和抓老鼠的功能;
狗具有吃、叫和看家的功能;
*/
//定义一个类表明狗
classDog{
//吃
public voideat() {
System.out.println(“吃骨头”);
}
//叫
public voidsay() {
System.out.println(“汪汪……”);
}
//看家
public voidlookHome() {
System.out.println(“看家”);
}
}
//定义一个类表明猫
classCat{
//吃
public voideat() {
System.out.println(“吃小鱼”);
}
//叫
public voidsay() {
System.out.println(“喵喵……”);
}
//抓老鼠
public voidcatchMouse() {
System.out.println(“抓老鼠”);
}
}
问题:
第一,猫和狗之间存在一样功能;
其次:测试的功能函数,一个函数只能测试一种动物,而且每个测试函数的具体实现基本类似;那么每添加一个新的动物,就必须新写一个测试函数,挺麻烦;
解决办法:使用继承和多态技术:

public classDemo2 {
public static voidmain(String[]args) {
//创建一只猫
Animalc=newCat();
//调用函数测试猫的行为
test(c);
//创建一条狗
Dogd=newDog();
//调用函数测试狗的行为
test(d);
}
private static voidtest(Animalc) {
//测试动物吃的行为
c.eat();
//测试动物叫的行为
c.say();
//测试动物抓老鼠的行为
// c.catchMouse();
}
}
/*
需求:描述并测试猫和狗的行为;
猫具有吃、叫和抓老鼠的功能;
狗具有吃、叫和看家的功能;
*/
//为了提高代码的复用性,可以定义一个猫和狗的共同的父类动物类,然后让猫和狗继承动物类
abstract classAnimal{
public abstract voideat();
public abstract voidsay();
}
//定义一个类表明狗
classDogextendsAnimal{
//吃
public voideat() {
System.out.println(“吃骨头”);
}
//叫
public voidsay() {
System.out.println(“汪汪……”);
}
//看家
public voidlookHome() {
System.out.println(“看家”);
}
}
//定义一个类表明猫
classCatextendsAnimal{
//吃
public voideat() {
System.out.println(“吃小鱼”);
}
//叫
public voidsay() {
System.out.println(“喵喵……”);
}
//抓老鼠
public voidcatchMouse() {
System.out.println(“抓老鼠”);
}
}

