class Animal {
public void eat(){
System.out.println("eat");
}
public void sleep(){
System.out.println("sleep");
}
}
class Dog extends Animal {
public void eat(){
System.out.println("狗吃肉");
}
public void sleep(){
System.out.println("狗站着睡觉");
}
}
class Cat extends Animal {
public void eat() {
System.out.println("猫吃鱼");
}
public void sleep() {
System.out.println("猫趴着睡觉");
}
}
//针对动物操作的工具类
class AnimalTool {
private AnimalTool(){}
public static void useAnimal(Animal a) {
a.eat();
a.sleep();
}
}
class DuoTaiDemo {
public static void main(String[] args) {
Cat c = new Cat();
c.eat();
c.sleep();
Cat c2 = new Cat();
c2.eat();
c2.sleep();
Cat c3 = new Cat();
c3.eat();
c3.sleep();
//...
System.out.println("--------------");
AnimalTool.useAnimal(c);
AnimalTool.useAnimal(c2);
AnimalTool.useAnimal(c3);
System.out.println("--------------");
Dog d = new Dog();
Dog d2 = new Dog();
Dog d3 = new Dog();
AnimalTool.useAnimal(d);
AnimalTool.useAnimal(d2);
AnimalTool.useAnimal(d3);
System.out.println("--------------");
}
}
有没有好心人可以讲解下13402849575 发表于 2016-8-28 11:33
类名.方法名(对象名),就可以输出啦
quicksand007 发表于 2016-8-28 11:35
但是useAnimal要求的对象是Animal类的呀 可以直接拿Cat类的来用吗?
13402849575 发表于 2016-8-28 11:43
AnimalTool.useAnimal()这个方法,接收的是Animal,而Cat和Dog都是Animal的子类,可以接收这个两种类型的实 ...
水月灬清影 发表于 2016-8-28 12:20
你没理解的是继承。
Cat和Dog是Animal的子类,将子类对象作为实参传递,运行子类重写后的方法。 ...

细听风语为梧桐 发表于 2016-8-28 17:31
useanimal();方法里面传入一个animal 类的a 参数,猫和狗都是animal的子类,可以传入当做参数。
运行的 ...
life写实 发表于 2016-8-29 17:00
该方法需要的而参数是Animal a,你传递具体动物cat或dog等于多态,其实就是Animal a=new Dog();刘老师为什 ...
哇塞!真是太感谢了~有种醍醐灌顶的赶脚~~a623562486 发表于 2016-8-29 21:24
这就是多态呀,父类引用指向子类对象呀,只要父类/子类中有相同方法,编译时看父类是否有,执行时执行子类的成 ...
| 欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |