最近学习Java里面的多态下面是个人的整理:

多态存在的3个必要条件:
  1.要有继承
  2.要有方法的重写
  3.父类引用指向子类对象(对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态连接)

  对于多态,可以总结它为:
  一、使用父类类型的引用指向子类的对象;
  二、该引用只能调用父类中定义的方法和变量;
  三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用)
  四、变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。
  五、如果继承的子类继承父类的的一个方法后加以重载,则该父类的引用不能使用重载之后的那个方法。

 




public class Textduotai {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
    /*这时多态就很好的体现了,你想给你的宠物喂食,只需要添加相对应动物类,和食物类的子类,比如你有养了一只乌龟,只需要写一个乌龟类让他继承动物类,和它相对应的food
    *说话,你想喂鱼给你的猫吃就只需要调用feed方法,结果你的猫吃到了鱼:程序输出我叫小白,我喜欢吃鱼,
    */
        Master master = new Master();
        master.feedFood(new Cat(), new Fish());

    }

}
//定义动物类,动物有两个成员属性name和age
class Animal{
    String name;
    int age;
    
  //成员变量的访问器和修改器即get和set方法
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
  //定义动物两个方法动物都会叫
    public void animalcay(){
        System.out.println();
    }
  //动物都要吃东西
    public void eat(){
         System.out.println();
    }

}
  //定义猫类并且让猫类继承动物类
class Cat extends Animal{
    String name;
    int age;
    
    public Cat(){
        System.out.println("小白");
    }
  //父类方法的重写
    public void animalcay(){
        System.out.println(" 喵喵叫");
    }
    public void eat(){
        System.out.print("I like fish");
    }
}
//定义狗类,并且让狗类继承动物类的方法
class Dog extends Animal{
    String name;
    int age;
    
    public Dog(){
        System.out.println("我叫小黑");
    }
  //夫类方法的重写
    public void animalcay(){
        System.out.println(" 旺旺叫");
    }
    public void eat(){
        System.out.print("我喜欢吃骨头");
    }
}
//定义食物类
class Food{
    String name;
public void showName(){
        System.out.println();
    }
}
class Fish extends Food{
    String name;
  //重写父类方法
    public void showName(){
        System.out.println("我喜欢吃鱼");
    }
}
class Bone extends Food{
    String name;
//重写父类方法
public void showName(){ 
    System.out.println("骨头");
    } 
} 

//定义主人类,比如要给动物喂食
class Master {
    String name ;
    public Master(){
    
    }
    public Master(String name){
        this.name  = name;
    }
    public void feedFood(Animal an,Food food){
        System.out.print(name+" ");
        
        an.eat();
        System.out.println("最喜欢食物:");
        food.showName();
    }
}



在上面代码中我们要实现主人给动物喂食物,我们定义动物类,猫类和狗类都继承于动物类,定义了食物类,和它的两个子类鱼和骨头,在上面我们可以看出多态就是同一引用或者类型多种引用就叫多态

==