1.多态
1.多态
1.1 要点
- 多态是方法的多态,不是属性的多态
- 多态的存在有三个必要条件:继承;方法重写;父类引用指向子类对象
- 父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了。
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();
}
}
网友评论