精华内容
下载资源
问答
  • 多态使用案例

    2020-12-15 20:43:36
    使用多态实现为宠物喂食 宠物饿了,主人需要为宠物喂食,使用多态实现该过程 不同宠物吃的东西不一样 不同宠物吃完东西后恢复健康值不一样 健康值达到100时,不需要继续喂食 创建一个Matser类 public class Master {...

    使用多态实现为宠物喂食

    宠物饿了,主人需要为宠物喂食,使用多态实现该过程
    不同宠物吃的东西不一样
    不同宠物吃完东西后恢复健康值不一样
    健康值达到100时,不需要继续喂食

    创建一个Matser类

    public class Master {
        public void feed(Pet pet, String food){
            pet.eat(food);
        }
    }
    

    再创建一个Pet父类

    public class Pet {
        private  int  healthy;
    
    
        public Pet(int healthy) {
            this.healthy = healthy;
        }
    
        public Pet() {
        }
    
        public  void eat(String  food){
            System.out.println("宠物吃"+food);
        }
        public int getHealthy() {
            return healthy;
        }
    
        public void setHealthy(int healthy) {
            this.healthy = healthy;
            if (this.healthy>100){
                this.healthy=100;
                System.out.println("宠物已经吃饱了,不能再喂了");
            }
        }
    }
    
    

    创建Dog子类

    public class Dog extends Pet {
        public Dog(int healthy) {
            super(healthy);
        }
    
        public Dog() {
        }
    
        @Override
        public void eat(String food) {
            System.out.println("狗狗吃"+food+",吃饱后健康值加3");
            setHealthy(getHealthy()+3);
        }
    }
    

    创建Penguin子类

    public class Penguin extends Pet {
        public Penguin(int healthy) {
            super(healthy);
        }
    
        public Penguin() {
        }
    
        @Override
        public void eat(String food) {
            System.out.println("企鹅吃"+food+",吃饱后健康值加5");
            setHealthy(getHealthy()+5);
        }
    }
    

    创建测试类

    public class Test {
    
    
        public static void main(String[] args) {
    
            Master m = new Master();
            Dog dog = new Dog(60);
            m.feed(dog,"骨头");
            System.out.println(dog.getHealthy());
            Penguin penguin = new Penguin(50);
            m.feed(penguin,"鱼");
            System.out.println(penguin.getHealthy());
        }
    }
    
    展开全文
  • 继承是面向对象程序设计的主要特征之一,允许重用现有类去创建新类的过程。下面使用示例学习一下c#继承与多态
  • C++多态使用

    2019-04-23 14:28:26
    一、多态 派生类对象的地址可以赋值给基类指针。对于通过基类指针调用基类和派生类中都有的同名、同参数表的虚函数 的语句,编译时并不确定要执行的是基类还是派生类的虚函数; 当程序运行到该语句时,如果基类...
    一、多态
      派生类对象的地址可以赋值给基类指针。对于通过基类指针调用基类和派生类中都有的同名、同参数表的虚函数
    的语句,编译时并不确定要执行的是基类还是派生类的虚函数;
      当程序运行到该语句时,如果基类指针指向的是一个基类对象,则基类的虚函数被调用,如果基类指针指向的是
    一个派生类对象,则派生类的虚函数被调用。这种机制就叫作“多态”。
    
      所谓“虚函数”,就是在声明时前面加了 virtual 关键字的成员函数。virtual 关键字只在类定义中的成员
    函数声明处使用,不能在类外部写成员函数体时使用。静态成员函数不能是虚函数。
    
    包含虚函数的类称为“多态类”。
      多态可以简单地理解为同一条函数调用语句能调用不同的函数;或者说,对不同对象发送同一消息,使得不同对
    象有各自不同的行为。

     

    #include <iostream>
    using namespace std;
    class A{
    public:
      virtual void Print() { cout << "A::Print" << endl; }
      void VPrint() { cout << __FUNCTION__ <<"() line: " << __LINE__<< endl; }
    };
    class B : public A{
    public:
      void Print() { cout << "B::Print" << endl; }
      void VPrint() { cout << __FUNCTION__ <<"() line: " << __LINE__<< endl; }
    };
    class D : public A{
    public:
      void Print() { cout << "D::Print" << endl; }
      void VPrint() { cout << __FUNCTION__ <<"() line: " << __LINE__<< endl; }
    };
    
    int main(){
      A a;
      B b;
      D d;
    
      //A:基类指针(pa)指向基类对象(a)
      A *pa = &a;
      pa->Print();    //多态,A类中a.Print()被调用
      pa->VPrint();
    
      //B:基类指针(pa)指向子类对象(b)
      pa = &b;//基类指针pa指向派生类对象b
      pa->Print();  //多态,B类中a.Print()被调用
      pa->VPrint();
    
      //D:基类指针(pa)指向子类对象(d)
      pa = &d;       //基类指针pa指向派生类对象d
      pa->Print();  //多态,D类中a.Print()被调用
      pa->VPrint();
      return 0;
    }
    
    二、通过基类引用实现多态
     通过基类的引用调用虚函数的语句也是多态的。若基类引用的是一个基类的对象,则被调用是基类的虚函数;
    若基类引用的是一个派生类的对象,则被调用的是子类的虚函数。
    
    
    #include <iostream>
    using namespace std;
    class A{
    public:
      virtual void Print() { cout << "A::Print" << endl; }
    };
    
    class B : public A{
    public:
       void Print() { cout << "B::Print" << endl; }
    };
    
    void Printlnfo(A & r){//传参相当于: r = a(指向父类A的Print()虚函数) ; 或者 r = b(指向子类B的Print()虚函数);
      r.Print();  //多态,调用哪个Print,取决于r引用了哪个类的对象
    }
    int main()
    {
      A a; B b;
      Printlnfo(a);  //输出 A::Print
      Printlnfo(b);  //输出 B::Print
      return 0;
    }
    
    

     

    展开全文
  • 联合当多态使用

    2016-08-08 14:50:00
    在c++中想实现多态我们首先想到的就是继承,然后用指针处理,这种做法会给我们调试的时候带来一定的不方便,如果用union来实现多态, union { int type; struct{ int a;} struct { char b; } struct{ ...

    在c++中想实现多态我们首先想到的就是继承,然后用指针处理,这种做法会给我们调试的时候带来一定的不方便,如果用union来实现多态,

    union
    {
      int type;
      struct
    {
      int a;
    }
    struct { char b; }
    struct
    {
      string c;
    } }

    这样我们可以在不同的情况下使用不同的type类型去判断当前使用的具体是哪一个联合,达到内存复用的目的。

    转载于:https://www.cnblogs.com/zkzk945/p/5749277.html

    展开全文
  • 多态使用的前提

    2019-04-07 00:23:00
    1:必须是继承(extends),实现(implements) 才行2:必须要重写(覆盖)父类的方法。 转载于:https://www.cnblogs.com/liyunchuan/p/10663788.html

    1:必须是继承(extends),实现(implements) 才行
    2:必须要重写(覆盖)父类的方法。

    转载于:https://www.cnblogs.com/liyunchuan/p/10663788.html

    展开全文
  • 继承,多态使用

    2016-07-07 10:58:44
    1、继承是指子类复用基类的方法属性并拓展基类的属性,从而使得...2、多态:相同的方法来处理来自同一基类不同的字类的对象。实现不同类的对象调用同一方法。 3、接口: a可用于定制一套通用的标准。 b拓展需要
  • 在Java中的三大属性:封装、继承、多态,其中多态存在的三个必要条件之一就是 使用父类引用指向子类对象即上转型 当例子比较简单的时候,已经重写了父类的方法此时仍然使用上转型来调用方法还不如直接使用本对象...
  • OC-多态使用介绍

    千次阅读 2015-08-27 23:02:20
    1、什么是多态?  多态就是某一类事物的多种形态。  程序中的多态,不同的对象以自己的方式相应相同名称方法的能力称为多态 2、多态的条件:1)、有继承关系,有方法重写  2)、父类的声明变量指向子类对象。...
  • 多态使用过程中,不论调用的属性是否为静态,都执行的是父类的属性。 如果方法为非静态方法,调用的执行的是子类中重写后的方法 如果方法为静态方法,调用的执行的为父类中的方法 ...
  • 接口的多态使用  接口应用实例:U盘、打印机可以使用共同的USB接口,插入到电脑上实现各自的功能。
  • 跟汤老师学Java笔记:多态的实现 完成:第一遍 1.多态的具体实现是怎样的? 将父类作为方法形参,将子类的对象作为方法实参,从而实现多态 案例:主人与宠物玩耍 主人类 Master 宠物 Pet ——> Dog、Cat package ...
  • 1、多态方法调用规则 虚函数,重写 1、、多态时不能调用子类特有的方法。可强转调用,是因为使用时是函数指针找到函数入口去执行的。父类没有这指针; 2、多态调用的方法基本都是子类的,如果...
  • 这是多态中的父类引用指向子类对象,可以调用子类中重写了父类的方法。 但我有一点不明白,既然调用重写了父类方法的子类,那么我直接创建一个子类的对象, 也可以达到相同的效果,那我为什么还要使用这样的向上...
  • 接口的多态使用 接口应用实例:U盘、打印机可以使用共同的USB接口,插入到电脑上实现各自的功能。 转载于:https://www.cnblogs.com/qingyundian/p/7750792.html...
  • 多态使用的注意点

    2015-12-15 14:51:07
    多态使用注意点一:不要在构造析构过程中调用virtual函数 #include using namespace std; class AA { public: AA(int a = 0) { this->a = a; print(); //在构造函数里面能实现多态吗? } //分析...
  • 接口的多态可以直接使用实现类中重写的方法,不能直接使用实现类新增方法。 interface MyInterface { void method(); } public class MyClass implements MyInterface { @override void method(){} void new...
  • 父类的引用指向子类对象 。 比father类,son类继承father类,father f = new son();  父类的引用f指向子类对象sun()d的就属于多态; 如果子类有覆写父类的方法,实际上调用的是子类的方法。
  • 多态基于继承;主要表现是重写; - -其实表现方式是重写和重载   对于创建的对象是向上转型还是向下转型: 向上转型:只能调用与父类引用中父类相同的方法,不能调用子类中自己定义的方法;如果在子类中重写了,...
  • 这个问题其实很简单,但是今天有人突然一说竟然不知道该怎么做了,我记得是使用instance of,但有同事说这是判断是否是父类的,其实也可以判断是否是他的子类. 为了验证是否正确,我写了一个demo验证一下.1. Animal...
  • 多态

    2021-02-18 11:17:44
    面向对象三大特征——多态 多态:同一个引用类型,使用不同的实例而执行不同操作 如何使用多态 使用父类作为方法形参实现多态 使用父类作为方法返回值实现多态 父类到子类的转换 小结 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,448
精华内容 10,979
关键字:

多态使用