zoukankan      html  css  js  c++  java
  • 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(); } }

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

  • 相关阅读:
    AtCoder Grand Contest 032-B
    AtCoder Grand Contest 032 A
    高橋君とカード / Tak and Cards AtCoder
    Divisibility by 25 CodeForces
    Fire Again CodeForces
    cctype函数 (字符类型判断)
    蓝桥杯--- 历届试题 国王的烦恼 (并查集)
    蓝桥杯---买不到的数目
    算法课(经典贪心)
    完美的数字
  • 原文地址:https://www.cnblogs.com/chenzhelove/p/7707182.html
Copyright © 2011-2022 走看看