多态是我们面向对象三大特征之一。在平时的生活中,比如跑这个动作,不同的动物中,跑的动作也是不一样的,可见,同一个行为,通过不同的事物,可以体现出不同的形态,多态就是描述这么一个状态。
多态:同一个行为,具有多个不同的表现形式。
前提:
1、继承或者实现【二选一】
2、方法重写
3.父类引用指向子类的对象
多态体现
格式:
父类类名 变量名=new 子类对象();
变量名.方法名();
父类的类型:指子类对象继承父类的类型,或者实现了父接口也可以。
Fu fu=new Zi();
普通的成员方法:编译能否通过看左边,运行结果看右边
普通的成员变量:编译能否通过看左边,运行结果看左边
public class Animal {
int age=100;
public void eat(){
System.out.println("我是动物类");
}
}
public class Cat extends Animal {
int age=10000;
@Override
public void eat() {
System.out.println("吃鱼!");
}
}
public class Demo {
public static void main(String[] args) {
//多态的形式,创建对象
Animal animal=new Cat();
//普通的成员方法:编译能否通过看左边,运行结果看右边
animal.eat();
//普通的成员变量:编译能否通过看左边,运行结果看左边
System.out.println(animal.age);
}
}
/*吃鱼!
100
*/
多态的好处
在实际工作中,父类类型作为方法的形式餐宿,传递子类对象的给方法,进行方法的调用,更能体现多态的扩展性。
public class Dog extends Animal{
@Override
public void eat() {
System.out.println("吃骨头");
}
}
public class Demo {
public static void main(String[] args) {
/* Cat cat=new Cat();
Dog dog=new Dog();
showCat(cat);
showDog(dog);*/
Animal animal=new Cat();
Animal animal1=new Dog();
showAnimal(animal);
showAnimal(animal1);
}
/*private static void showCat(Cat cat) {
}
private static void showDog(Dog dog) {
} */
public static void showAnimal(Animal animal){
animal.eat();
}
}
注释与代码对比
public static void showAnimal(Animal animal)相当于
private static void showCat(Cat cat) {
}
private static void showDog(Dog dog) {
}