什么是多态 java中如何实现多态

包身工 3个月前 已收到3个回答 举报

我想宣泄 4星

共回答了430个问题采纳率:94.9% 评论

多态分为编译时多态和运行时多态。

1.编译时多态,其实就是方法重载,相同函数名,但签名不相同。值得注意的是签名不包括方法返回值,换句话说,两个方法,函数名和入参都相同,但返回值不同,编译器回报错的。

2.运行时多态,其实就和继承和接口实现相关了,子类可以覆盖父类的非final,非static,非private方法或者实现接口方法。运行时,动态绑定实例到父类或接口的引用,那jvm是怎么知道调用哪个子类的实例的对应方法的呢?这就是你问的问题了——Java中对象在jvm内部都有描述元数据,对象头,对象头中存储了当前实例的类型信息,调用时jvm就根据这个type能精确找到具体是点用哪个子类的方法了。

4小时前

32

冰魄空瞳 2星

共回答了24个问题 评论

百度搜索圈T社区 免费行业视频教程

www.aiquanti.com

多态,就是重载和重写.重载发生在一个类中.重写发生在子类,意思就是子类重写父类相同名称的方法.刚学语言有的东西,不必搞得那么清楚,只有知道怎么用就行了,有的问题你要想真正把它搞得很懂,短时间是不可能的,比如说接口,没有几年工作经验你根本不可能真正理解什么是接口,甚至有的人工作四,五年也没搞明白什么是接口,不要花太多时间去搞这些不容易搞懂的问题.

重载的特性,方法名相同.返回类型,传入方法的参数不同(包括个数和类型).

重写的特性,方法名相同,返回类型,参数均相同,必须发生在子类.

1.Java语言允许某个类型的引用变量引用子类的实例,而且可以对这个引用变量进行类型转换。

Animal animal=new Dog(); //引用变量animal引用一个Animal子类Dog的实例

Dog dog=(Dog)animal; //向下转型,把Animal类型转换为Dog类型

Creature creature=animal; //向上转型,把Animal类型转换为 Creature类型

animal=new Cat(); //引用变量animal引用另一个Animal子类Cat的实例

注:Creature这里指的是生物。

2.如果把引用变量转换为子类类型,称为向下转型,如果把引用变量转换为父类类型,称为向上转型。

3.在进行引用变量的类型转换时,会受到各种限制。而且在通过引用变量访问它所引用的实例的静态属性、静态方法、实例属性、实例方法,以及从父类中继承的方法和属性时,Java虚拟机会采用不同的绑定机制。

4.成员变量、静态方法按照引用变量声明的类型静态绑定;实例方法按照引用变量引用的实例动态绑定。

例如,对于以下这段代码:

Fathers f=new Sons();

System.out.println(“f.var=”+f.var);

System.out.println(“f.staticVar=”+f.staticVar);

f.method();

f.staticMethod();

运行时将会输出如下结果:

f.var=FatherVar

f.staticVar=StaticFaterVar

Son method

Static Father method

class Fathers{

String var="FatherVar";

static String staticVar="StaticFatherVar";

void method(){System.out.println("Father method");}

static void staticMethod(){System.out.println("Static Father method");}

}

class Sons extends Fathers{

String var="SonVar";

static String staticVar="StaticSonVar";

void method(){System.out.println("Son method");}

static void staticMethod(){System.out.println("Static Son method");}

String sonVar=null;

void sonMethod(){}

}

2小时前

1

傍晚的尾巴 1星

共回答了187个问题 评论

父类指针指向子类对象,就是多态了。

比如A是父类,B和C都是继承于A

B b = new B();

那A a = b;

就是多态了。

21小时前

11
可能相似的问题

热门问题推荐

Copyright © 2024 微短问答 All rights reserved. 粤ICP备2021119249号 站务邮箱 service@wdace.com