A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 玉遥 于 2014-7-6 22:06 编辑

多态好处:
1、提高了程序的可维护性,由继承来保证,不解释
2、提高了程序的扩展性,请大家先看如下代码,视频详解
[tianchai_youku]XNzM2Mzc4ODcy[/tianchai_youku]
class Animal {
//方法体为空。
public void eat() {}
public void sport() {}
}
class Cat extends Animal {
public void eat() {
  System.out.println("猫吃鱼");
}
public void sport() {
  System.out.println("猫捉老鼠");
}
}
class Dog extends Animal {
public void eat() {
  System.out.println("狗吃肉");
}
public void sport() {
  System.out.println("狗游泳");
}
}
class Pig extends Animal {
public void eat() {
  System.out.println("猪吃草");
}
public void sport() {
  System.out.println("猪拱地");
}
}
class DuoTaiDemo4 {
//测试方法。main里面的内容是可以发生变化的。
public static void main(String[] args) {
  /*
  //需求:我喜欢猫,我要来只猫
  Cat c = new Cat();
  c.eat();
  c.sport();

  //需求:我喜欢猫,我要再来只猫
  Cat c2 = new Cat();
  c2.eat();
  c2.sport();
  //需求:我喜欢猫,我要再来只猫
  Cat c3 = new Cat();
  c3.eat();
  c3.sport();
  //我们发现:调用这多个方法的仅仅是对象不一样。
  //而调用的方法是一样的。
  //所以,我要改进,把变化的对象作为参数传递即可。
  //改进后,我们的调用方式
  System.out.println("------------------------");
  catMethod(c);
  catMethod(c2);
  catMethod(c3);
  System.out.println("------------------------");
  //需求:我喜欢狗,我要来只狗
  Dog d = new Dog();
  Dog d2 = new Dog();
  Dog d3 = new Dog();
  dogMethod(d);
  dogMethod(d2);
  dogMethod(d3);
  System.out.println("------------------------");
  //需求:我喜欢猪,我要来只猪
  //首先,定义猪类,然后造对象,再在main方法里面加入针对猪的操作
  Pig p = new Pig();
  Pig p2 = new Pig();
  Pig p3 = new Pig();
  pigMethod(p);
  pigMethod(p2);
  pigMethod(p3);
  */
  //需求:我继续喜欢狼...
  //由于,我们到底有哪些动物我们喜欢,我们自己都可能不知道了
  //所以,我们就用动物替代其他的具体的类。
  //这样的话,别人不管传递那种动物,我的方法是不需要改动的。
  //改进后的测试
  Cat c = new Cat();
  animalMethod(c);
  Dog d = new Dog();
  animalMethod(d);
}
/*
public static void catMethod(Cat c) {
  c.eat();
  c.sport();
}
public static void dogMethod(Dog d) {
  d.eat();
  d.sport();
}
public static void pigMethod(Pig p) {
  p.eat();
  p.sport();
}
*/
public static void animalMethod(Animal a) { //Animal a = c; c = new Cat();  Animal a = new Cat();
  a.eat();
  a.sport();
}
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马