精华内容
下载资源
问答
  • 2020-10-26 18:30:00

    经典Java多态例子@白兴华

    Java 多态

    多态是Java的基础,学好,理解好多态有助于我们理解Java的其他的知识点

    定义

    多态是同一个行为具有多个不同的表现形式或形态的能力

    多态的优点

    1.消除类型之间的耦合关系
    2.可替代性
    3.可扩展性
    4.接口性
    5.灵活性
    6.简化性

    存在的三个必要条件

    1.继承
    2.重写
    3.父类引用指向子类对象

    public class TestPolymorphism {
    	  public static void animalSaySomething(Animals an) {
    		  an.saySomething();
    		  if(an instanceof  Cat) {          //判断形参an是不是和cat一样
    			  Cat cat=(Cat)an;                //把an强转为cat类型
    			  cat.show();
    		  }
    	  }
    	       
    	
    	
           public static void main(String[] args) {
    		Dog  dog =new Dog();
    		Cat  cat  =new  Cat();
    		Bird  bird =new  Bird();
    		animalSaySomething(dog);       //形参名(实参);
    		animalSaySomething(cat);
    		animalSaySomething(bird);
    	}
    }
    class  Animals{
    	public  void  saySomething() {
    	  System.out.println("说点什么。。。");
    		}
    }
    class  Dog   extends  Animals {
    	public    void  saySomething() {
    		System.out.println("汪汪汪");
    	}
    }
    class  Cat  extends Animals{
    	public void saySomething() {
    		System.out.println("喵喵喵");
    	}
    	public  void  show() {
    		System.out.println("我是一只小猫咪");
    	}
    }
    class  Bird  extends  Animals{
    	public void saySomething() {
    		System.out.println("叽叽喳喳");
    	}
    }
    

    输出:

    汪汪汪
    喵喵喵
    我是一只小猫咪
    叽叽喳喳
    
    
    更多相关内容
  • 下面要给大家分享的是一个多态经典案例,一起来看看这个java多态简单例子吧。/*多态的好处:提高了代码的维护性和扩展性;弊端:父类不能使用子类的特有功能。要用子类的特有功能,可以:A:创建子类对象,调用方法...

    下面要给大家分享的是一个多态经典案例,一起来看看这个java多态简单例子吧。/*多态的好处:提高了代码的维护性和扩展性;

    弊端:父类不能使用子类的特有功能。

    要用子类的特有功能,可以:

    A:创建子类对象,调用方法即可(不合理,太占内存);

    B:把父类的引用强制转换为子类的引用(向下转型);

    向上转型:Fu f = new Zi();

    向下转型:Zi z = (Zi) f;//要求该f必须是转换为Zi的。

    */

    class Animal

    {

    public void eat()

    {

    System.out.println("吃饭");

    }

    }

    class Dog extends Animal

    {

    public void eat()

    {

    System.out.println("狗吃肉");

    }

    public void lookDoor()

    {

    System.out.println("狗看门");

    }

    }

    class Cat extends Animal

    {

    public void eat()

    {

    System.out.println("猫吃鱼");

    }

    public void playGame()

    {

    System.out.println("捉迷藏");

    }

    }

    public class DuoTaiTest

    {

    public static void main(String[] args)

    {

    //定义为狗

    Animal a = new Dog();

    a.eat();

    System.out.println("------------");

    //还原成狗

    Dog d = (Dog) a;

    d.eat();

    d.lookDoor();

    System.out.println("-------------");

    //变成猫

    a = new Cat();

    a.eat();

    System.out.println("-------------");

    //还原成猫

    Cat c = (Cat) a;

    c.eat();

    c.playGame();

    }

    }

    运行的结果

    0480f6e2f70bc8a191636dc133e37b50.png

    上面这个简单的java多态举例,你都仔细的看了吗?你还想了解更多的java经典实例吗?请继续关注奇Q工具网的java实例栏目来了解吧。

    推荐阅读:

    展开全文
  • 运行时多态例子 多态实现的机制 JVM 部分内容摘自: Java多态的实现机制是什么,写得非常好!_Java技术栈的博客-CSDN博客 子类型和子类 子类型(Subtype)这个词和子类(Subclass)的区别,简单地说,只要是A...

    目录

    子类型和子类

    多态分两种

    多态的用途

    多态的转型

    运行时多态的例子

    多态实现的机制 JVM


    部分内容摘自:

    Java多态的实现机制是什么,写得非常好!_Java技术栈的博客-CSDN博客

    子类型和子类

    子类型(Subtype)这个词和子类(Subclass)的区别,简单地说,只要是A类运用了extends关键字实现了对B类的继承,那么我们就可以说Class A是Class B的子类,子类是一个语法层面上的词,只要满足继承的语法,就存在子类关系。

    子类型比子类有更严格的要求,它不仅要求有继承的语法,同时要求如果存在子类对父类方法的改写(override),那么改写的内容必须符合父类原本的语义,其被调用后的作用应该和父类实现的效果方向一致。只有保证子类都是子类型,多态才有意义。

    多态分两种

    1. 编译时多态(又称静态多态)

    2. 运行时多态(又称动态多态)

    重载(overload)就是编译时多态的一个例子,编译时多态在编译时就已经确定,运行时运行的时候调用的是确定的方法。

    我们通常所说的多态指的都是运行时多态,也就是编译时不确定究竟调用哪个具体方法,一直延迟到运行时才能确定。这也是为什么有时候多态方法又被称为延迟方法的原因。

    虚拟机会在执行程序时动态调用实际类的方法,它会通过一种名为动态绑定(又称延迟绑定)的机制自动实现。

    多态的用途

    多态最大的用途我认为在于对设计和架构的复用,更进一步来说,《设计模式》中提倡的针对接口编程而不是针对实现编程就是充分利用多态的典型例子。

    多态的转型

    运行时多态的例子

    public class Duotai {
        public static void main(String[] args) {
            People p=new Stu();
            p.eat();//调用子类重写过的方法 就是运行时多态  向上转型
    //        p.study();  错误 p没有study 方法
            Stu s=(Stu)p; //调用子类型特有的方法  向下转型
            s.study();
        }
    }
    class People{
        public void eat(){
            System.out.println("吃饭");
        }
    }
    class Stu extends People{
        @Override
        public void eat(){
            System.out.println("吃水煮肉片");
        }
        public void study(){
            System.out.println("好好学习");
        }
    }


    多态实现的机制 JVM

    拿上述例子来说,父类和子类都有自己的方法表,方法表的构造如下:

    由于Java的单继承机制,一个类只能继承一个父类,而所有的类又都继承自Object类。方法表中最先存放的是Object类的方法,接下来是该类的父类People的方法,最后是该类Stu本身的方法。这里关键的地方在于,如果子类改写了父类的方法,那么子类和父类的那些同名方法共享一个方法表项,都被认作是父类的方法。

    注意这里只有非私有的实例方法才会出现,并且静态方法也不会出现在这里,原因很容易理解:静态方法跟对象无关,可以将方法地址直接引用,而不像实例方法需要间接引用。

    由于以上方法的排列特性(Object——父类——子类),使得方法表的偏移量总是固定的。例如,对于任何类来说,其方法表中equals方法的偏移量总是一个定值,所有继承某父类的子类的方法表中,其父类所定义的方法的偏移量也总是一个定值。

    前面说过,方法表中的表项都是指向该类对应方法的指针,这里就开始了多态的实现

    假设Class Stu是Class People的子类,并且Stu改写了People的方法eat(),那么在People的方法表中,eat方法的指针指向的就是B的People方法入口。

    而对于Stu来说,它的方法表中的eat() 方法则会指向其自身的eat() 方法而非其父类People的(这在类加载器载入该类时已经保证,同时JVM会保证总是能从对象引用指向正确的类型信息)。

    结合方法指针偏移量是固定的以及指针总是指向实际类的方法域,我们不难发现多态的机制就在这里:

    在调用方法时,实际上必须首先完成实例方法的符号引用解析,结果是该符号引用被解析为方法表的偏移量。

    虚拟机通过对象引用得到方法区中类型信息的入口,查询类的方法表,当将子类对象声明为父类类型时,形式上调用的是父类方法,此时虚拟机会从实际类的方法表(虽然声明的是父类,但是实际上这里的类型信息中存放的是子类的信息)中查找该方法名对应的指针(这里用“查找”实际上是不合适的,前面提到过,方法的偏移量是固定的,所以只需根据偏移量就能获得指针),进而就能指向实际类的方法了。

    概括一下,就是运行时虽然这个对象的声明是父类的,但是是  Stu类的对象,所以eat()方法绑定的是Stu重写后的eat()方法的地址。

     更深入的内容:

    Java多态的实现机制是什么,写得非常好!_Java技术栈的博客-CSDN博客

    展开全文
  • Java多态例子

    2022-05-10 14:42:00
    1.多态概述 1.1多态是继封装、继承之后,面向对象的三大特性。 2.多态体现为父类引用变量可以指向子类对象。 3.前提条件:必须有子类父类关系。 4.多态的定义与使用格式 定义格式:父类类型 变量名=new 子类...

    1.多态概述

          1.1多态是继封装、继承之后,面向对象的三大特性。

    2.多态体现为父类引用变量可以指向子类对象。

    3.前提条件:必须有子类父类关系。

    4.多态的定义与使用格式

          定义格式:父类类型 变量名=new 子类类型();

    5.理解:
          5.1多态是同一个行为具有多个不同表现形式或形态的能力。
          5.2多态就是同一个接口,使用不同的实例而执行不同操作。
     

    7.以七个葫芦娃为例:每个葫芦娃都有不同的战斗方式,需要一个来调用。

    (1)提供一个父类

    public abstract class PowerChild {
        public abstract void fighterSkill();
    }

    (2)调用者

    public class leader {
        public void scedure(PowerChild pc){
        pc.fighterSkill();
        }
    }

    (3)子类(fireBoy、waterBoy)

    public class fireBoy extends PowerChild {
        @Override
        public void fighterSkill(){
            System.out.println("喷火战斗法");
        }
    }
    public class waterBoy extends PowerChild {
        @Override
        public void fighterSkill(){
            System.out.println("喷水战斗法");
        }
    }

    (4)测试代码

    public class test {
        public static void main(String[] args) {
            leader lead=new leader();
    
            //选派(先把要传递的实参new出来)
            fireBoy fb=new fireBoy();       //子类对象
            lead.scedure(fb);              //传实参时传子类对象
    
            System.out.println("--------------------------------------");
    
            lead.scedure(new fireBoy());  //
        }
    }
    

    (5)运行结果

     

    展开全文
  • 安老师 的一个例子,c++ 的封装继承多态例子
  • C++继承与多态例子

    热门讨论 2009-06-28 17:13:08
    C++实现的一个继承与多态例子,内容详细且易懂
  • 多态例子

    2018-12-28 16:40:26
    多态的前提 1.子父类的继承关系 2.方法的重写 3.父类引用指向子类对象
  • java多态简单例子详解

    千次阅读 2021-02-27 20:52:11
    java多态简单例子:首先有一个Animal类,它有Cat,和Dog两个子类;然后在Animal中有个say方法,当Cat调用这个方法的时候输出的是“小猫喵喵喵”,当Dog调用这个方法时,输出的是“小狗汪汪汪”。【相关学习推荐:...
  • 分享java多态简单例子

    2021-03-10 09:50:07
    java多态简单例子:首先创建接口;然后需要创建两个类来确定说话内容;接着需要在说话的同时打印时间;最后创建测试类运行即可。java多态简单例子多态的三大必要条件(实现):需要有继承(继承类,继承抽象类,实现...
  • 一个多态例子

    2016-01-06 14:34:49
    最近看DELPHI高手突破,把里面多态的说明,用代码实现了一下。多态性是允许用户将父对象设置成为与一个或更多的它的子对象相等的技术,赋值之后,基类 对象就可以根据当前赋值给它的派生类对象的特性以不同的方式...
  • c++多态的小例子

    2021-02-03 16:01:24
    //关于多态编程思想 class CPU//抽象类:无法实例化对象 { public: virtual void calculate() = 0; }; class Display { public: virtual void disp() = 0; }; class Memonry { public: virtual void memon() = 0;...
  • C++ 多态的简单例子

    2022-01-17 16:28:34
    // 多态测试 参数是指针类型或引用类型 void drawShape(Shape* s) {// (Shape &s) s->Draw(); //s->Draw(); } int main() { // 同一个函数根据参数的不同类型体现出不同的结果 cout; Circle c; drawShape(&c);// ...
  • 多态 多态,一个事务具备的不同形态就是多态 实例: 在教室,学习形态 逛超市,顾客形态 救落水孩子.英雄形态 对象的多态性 多态前提 要有继承,或者接口实现 要方法的重写 父类或者接口的引用变量指向子类或者...
  • 继承和多态例子shape&&point.rar
  • 例子一: public class 多态 { public static void main(String[] args) { parent obj1=new chid1();//向上转型 // parent obj=new parent() ;报错,抽象类不能创建实例 obj1.eat(); chid1 obj3=(chid1) obj1;/...
  • 关于多态,如果是学过或者做C++开发者,都应该知道多态的特性。虚函数和继承构成了多态。简单的一句话就是:基类的指针指向派生类,其行为不同。 前些年面试的时候碰到的一个关于多态的问题,如下: 父类Parent,...
  • 代码块 package main import "fmt" type CarTyper interface { //接口 ...//多态 i.GetCar() } func main() { var carStore CarStore carStore.Order (80000 , "Audi" ) }
  • 多态: 有了重写之后,不同子类可以有自己不同的实现。那么多态到底是如何体现的呢?是通过父类的引用指向子类的实现。 在OperationFactory类中的switch块中,父类的引用分别指向的不同的子类的实现。最后在main...
  • 多态 指同一个方法调用由于对象不同可能会产生不同的行为。 关于多态要注意以下几点: 多态是方法的多态,属性没有多态多态的存在有两个必要条件:继承、方法重写 代码如下 class Man: def eat(self): print('饿...
  • Java多态示例代码

    2021-03-12 20:06:01
    package lesson;class A{public String show(D obj){return ("A and D");}public String show(A obj){return ("A and A");}}class B extends A{public String show(B obj){return ("B and B");}public String show(A...
  • 多态例子——Java代码

    千次阅读 2018-03-06 16:43:19
    /*多态的好处:提高了代码的维护性和扩展性;弊端:父类不能使用子类的特有功能。要用子类的特有功能,可以:A:创建子类对象,调用方法即可(不合理,太占内存);B:把父类的引用强制转换为子类的引用(向下转型)...
  • 文章目录C++程序笔记——继承和多态程序实例派生类构造函数和析构函数程序实例知识点C++实现代码函数重定义和派生类的继承方式的实例知识点编写运行的样例分析与总结多重继承下的派生类定义知识点C++代码实现类体...
  • C++一个多态代码实例

    2021-10-23 12:23:31
    C++中经常使用基类和派生对象多态的特性实现一些数据的传输,基类为纯虚类的接口类,派生类继承接口类。以下实现了一个典型的多态实例,该实例可以应用在软件开发中两个类的数据传输中。下面直接上代码: /* * ...
  • Python多态实例详解

    2021-03-06 01:18:44
    [Python]代码# coding:utf-8"""多态(英语:Polymorphism),是指面向对象程序运行时,相同的消息可能会送给多个不同的类之对象,而系统可依据对象所属类,引发对应类的方法,而有不同的行为。简单来说,所谓多态意指...
  • JS中的多态实例详解

    2020-11-29 12:55:38
    多态在面向对象编程语言中是十分重要的。在JAVA中是通过继承来得到多态的效果。如下: public abstract class Animal { abstract void makeSound(); // 抽象方法 } public class Chicken extends Animal{ public ...
  • 今天分享的这个例子既体现了继承,也体现出了多态和封装。可以说一个例子把面向对象的三个特征都体现了一遍,俗话说麻雀虽小五脏俱全。 目录 例子: UML类图: 结果: 代码: Form1窗体 放入苹果: 放入橘子...
  • Python中的多态实例

    2021-12-22 21:13:45
    class Animal(object): def eat(self) : print('Animal eat something') class Dog(Animal): def eat(self) : print('Dog eats meat') class Cat(Animal): print('Cat eats fish') animal = Animal() ...
  • C# 多态实例

    2021-08-27 17:10:38
    1、C#中的访问修饰符 public:公开的公共的。 private:私有的,只能在当前类的内部访问。 protected:受保护的,只能在当前类的内部以及该类的子类中访问。 internal:只能在当前项目中访问。在同一个项目中,internal...
  • java中的多态案例

    2021-03-04 06:23:47
    多态性实际上有两种:1.方法的多态性:1.1方法重载:相同的方法名,会根据传入的参数的类型和个数不同执行不同的方法1.2方法覆写:同一个方法名称,会根据子类的不同实现不同的功能2.对象的多态性:指的是发生在类的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 103,282
精华内容 41,312
关键字:

多态例子