package com.itheima.demo02duotai;
public abstract class Animal {
public abstract void eat();
public abstract void sleep();
}
package com.itheima.demo02duotai;
public class Cat extends Animal{
@Override
public void eat() {
System.out.println("猫吃鱼!");
}
@Override
public void sleep() {
System.out.println("猫随心所欲的睡!");
}
//定义猫特有的抓老鼠的方法
public void catchMouse(){
System.out.println("猫和老鼠一起玩耍!");
}
}
package com.itheima.demo02duotai;
public class Dog extends Animal {
@Override
public void eat() {
System.out.println("狗吃肉!");
}
@Override
public void sleep() {
System.out.println("狗趴着睡!");
}
//定义狗特有的看家的方法
public void lookHome(){
System.out.println("狗狗在看家!");
}
}
package com.itheima.demo17duotai;
import com.itheima.demo13interface.C;
/*
多态的好处:扩展性强
父类的变量可以赋值不同的子类对象
赋值哪个子类对象,调用的就是哪个子类对象重写后的方法
多态的弊端:不能使用子类特有的功能
多态表现的是父类的形态(父类类型的变量),父类中没有子类特有的方法
实际工作中:
一般都是使用父类类型作为方法的形式参数类型或者方法的返回值类型
*/
public class Demo01 {
public static void main(String[] args) {
Cat c = new Cat();
c.eat();
c.sleep();
c.catchMouse();
Animal a = new Cat();
a.eat();
a.sleep();
//a.catchMouse();//不能使用子类特有的功能
System.out.println("----------------------------------------------------");
show(new Cat());
show(new Dog());
System.out.println("----------------------------------------------------");
/*
多态:
Animal an = getInstance(); = new Cat();
Animal an = getInstance(); = new Dog();
*/
Animal an = getInstance();
an.eat();
an.sleep();
}
/*
定义一个方法,方法的返回值类型使用Animal类型
在方法中可以返回Animal的任意的子类对象
*/
public static Animal getInstance(){
//return new Cat();
return new Dog();
}
/*
定义一个show方法,参数使用Animal类型,可以接收Animal任意的子类对象
多态:扩展性强
Animal a = new Cat();
Animal a = new Dog()
*/
public static void show(Animal a){
a.eat();
a.sleep();
}
/*
定义一个show方法,参数使用Dog类型,在方法中可以调用Dog类中的方法
Dog dog = new Dog()
*/
/*public static void show(Dog dog){
dog.eat();
dog.sleep();
dog.lookHome();
}*/
/*
定义一个show方法,参数使用Cat类型,在方法中可以调用Cat类中的方法
Cat cat = new Cat();
*/
/*public static void show(Cat cat){
cat.eat();
cat.sleep();
cat.catchMouse();
}*/
}