Java中多态的理解

Posted chenzhe1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中多态的理解相关的知识,希望对你有一定的参考价值。

最近学习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(); } }

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



























以上是关于Java中多态的理解的主要内容,如果未能解决你的问题,请参考以下文章

[java面试]关于多态性的理解

java8-3 多态的好处和弊端以及多态的理解

理解 Java 的三大特性之多态

java提高篇之理解java的三大特性——多态

Java提高篇之理解java的三大特性——多态

Java多态的理解