多态

2019-11-19  本文已影响0人  Yanl__

1.多态

1.多态

1.1 要点

  1. 多态是方法的多态,不是属性的多态
  2. 多态的存在有三个必要条件:继承;方法重写;父类引用指向子类对象
  3. 父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了。
class Animal{
    public void shoot(){
        System.out.println("会叫");
    }
}
// 多态存在的三个条件,继承、方法重写、父类引用指向子类对象
class Dog extends Animal{  // 1。 继承
    public void shoot(){  // 2。 方法重写
        System.out.println("汪汪汪");
    }
}
class Cat extends Animal{
    public void shoot(){
        System.out.println("喵喵喵");
    }
}
public class TestPolym {
    static void animalCry(Animal a){  // 3。 父类引用指向子类对象
        a.shoot();
    }
    public static void main(String[] args) {
        Animal a1 = new Cat();
        animalCry(a1);
    }
}

1.2 对象的转型
多态后想使用子类特有的功能

class Animal{
    public void shoot(){
        System.out.println("会叫");
    }
}
// 多态存在的三个条件,继承、方法重写、父类引用指向子类对象
class Dog extends Animal{  // 1。 继承
    public void shoot(){  // 2。 方法重写
        System.out.println("汪汪汪");
    }
}
class Cat extends Animal{
    public void shoot(){
        System.out.println("喵喵喵");
    }
    public void loveHost(){
        System.out.println("粘人");
    }
}
public class TestPolym {
    static void animalCry(Animal a){  // 3。 父类引用指向子类对象
        a.shoot();
    }
    public static void main(String[] args) {
        Animal a1 = new Cat();
        animalCry(a1);
//        a1.loveHost(); //因为上面实例化的是Animal类,所以找不到该方法,会报错

        Animal a2 = new Cat();
        Cat a3 = (Cat) a2; // 向下转型后  可以使用子类独有的方法
        a3.loveHost();
    }
}
上一篇 下一篇

猜你喜欢

热点阅读