多态是同一个行为具有多个不同表现形式或形态的能力。
多态存在的三个必要条件
继承
重写
父类引用指向子类对象
多态的实现方式
方式一:重写:
override
方式二:接口
interface
方式三:抽象类和抽象方法
abstract
1,多态的体现
父类的引用指向了自己的子类对象。
父类的引用也可以接收自己的子类对象。
2,多态的前提
必须是类与类之间有关系。要么继承,要么实现。
通常还有一一个前提:存在覆盖。
3,多态的好处
多态的出现大大的提高程序的扩展性。将对象调用变简单了。
4,多态的弊端:
提高了扩展性,但是只能使用父类的引用访问父类中的成员。
public static void main(String[] args) {
// write your code here
Animal a=new Cat();//类型提升,向上转型
a.eat();
//强制将父类的引用转成子类类型
Cat c=(Cat)a;
}
public static void function(Animal a)
{
a.eat();
}
abstract class Animal
{
abstract void eat();
}
class Cat extends Animal
{
public void eat()
{
System.out.println("吃老鼠");
}
public void catmouse()
{
System.out.println("抓老鼠");
}
}
class Dog extends Animal
{
public void eat()
{
System.out.println("吃骨头");
}
public void kanjia()
{
System.out.println("看家");
}
}
class Pig extends Animal
{
public void eat()
{
System.out.println("吃饲料");
}
public void gongdi()
{
System.out.println("拱白菜");
}
}
关键点:
千万不要将父类对象转子类类型,我们能转换的父类引用指向自己的子类对象时,该应用可以被提升,也可以被强制转换,多态自始都是子类的变化。
只能向上转型,如猫转型动物,但动物不能转型猫,猫也不能转型成如狗、猪之类的其他动物。