
正文
实现多态java的代码 实现多态java的代码有哪些
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
Java运行时多态性的实现
运行时多态性是面向对象程序设计代码重用实现多态java的代码的一个最强大机制 动态性实现多态java的代码的概念也可以被说成 一个接口 多个方法 Java实现运行时多态性的基础是动态方法调度 它是一种在运行时而不是在编译期调用重载方法的机制 下面就继承和接口实现两方面谈谈java运行时多态性的实现
一 通过继承中超类对象引用变量引用子类对象来实现
举例说明
//定义超类superA
class superA
{
int i =
void fun()
{
System out println( This is superA )
}
}
//定义superA的子类subB
class subB extends superA
{
int m =
void fun()
{
System out println( This is subB )
}
}
//定义superA的子类subC
class subC extends superA
{
int n =
void fun()
{
System out println( This is subC )
}
}
class Test
{
public static void main(String[] args)
{
superA a
subB b = new subB()
subC c = new subC()
a=b
a fun() ( )
a=c
a fun() ( )
}
}
运行结果为
This is subB
This is subC
上述代码中subB和subC是超类superA的子类 实现多态java的代码我们在类Test中声明了 个引用变量a b c 通过将子类对象引用赋值给超类对象引用变量来实现动态方法调用 也许有人会问 为什么( )和( )不输出 This is superA java 的这种机制遵循一个原则 当超类对象引用变量引用子类对象时 被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法 但是这个被调用的方法必须是在超类中定义过的 也就是说被子类覆盖的方法
所以 不要被上例中( )和( )所迷惑 虽然写成a fun() 但是由于( )中的a被b赋值 指向了子类subB的一个实例 因而( )所调用的fun()实际上是子类subB的成员方法fun() 它覆盖了超类superA的成员方法fun() 同样( )调用的是子类subC的成员方法fun()
另外 如果子类继承的超类是一个抽象类 虽然抽象类不能通过new操作符实例化 但是可以创建抽象类的对象引用指向子类对象 以实现运行时多态性 具体的实现方法同上例
不过 抽象类的子类必须覆盖实现超类中的所有的抽象方法 否则子类必须被abstract修饰符修饰 当然也就不能被实例化了
二 通过接口类型变量引用实现接口的类的对象来实现
接口的灵活性就在于 规定一个类必须做什么 而不管你如何做 我们可以定义一个接口类型的引用变量来引用实现接口的类的实例 当这个引用调用方法时 它会根据实际引用的类的实例来判断具体调用哪个方法 这和上述的超类对象引用访问子类对象的机制相似
举例说明
//定义接口InterA
interface InterA
{
void fun()
}
//实现接口InterA的类B
class B implements InterA
{
public void fun()
{
System out println( This is B )
}
}
//实现接口InterA的类C
class C implements InterA
{
public void fun()
{
System out println( This is C )
}
}
class Test
{
public static void main(String[] args)
{
InterA a
a= new B()
a fun()
a = new C()
a fun()
}
}
输出结果为
This is B
This is C
上例中类B和类C是实现接口InterA的两个类 分别实现了接口的方法fun() 通过将类B和类C的实例赋给接口引用a而实现了方法在运行时的动态绑定 充分利用了 一个接口 多个方法 展示了Java的动态多态性
需要注意的一点是 Java在利用接口变量调用其实现类的对象的方法时 该方法必须已经在接口中被声明 而且在接口的实现类中该实现方法的类型和参数必须与接口中所定义的精确匹配
lishixinzhi/Article/program/Java/hx/201311/26085
相关问答
Q1: 谁能跟我说几个JAVA多态,在现实生活中应用的例子,不要说代码和概念,就只说案例
有一个比较经典的多态实例:
有一个Animal类,它有Cat,和Dog两个子类,在Animal中有个say方法,当Cat调用这个方法的时候输出的是“小猫喵喵喵”,当Dog调用这个方法时,输出的是“小狗汪汪汪”,这就是Java多态的实现。
1、定义一种动物,该类型的动物有叫的属性。
2、分别定义猫,狗,鸟,都继承于该动物,都有叫的属性。
3、分别表示出各个具体小动物的叫声,例如猫的叫声:喵、狗的叫声:汪、鸟的叫声:咻,点是叫声,实现各个具体小动物用的叫声的方法是用的同一个函数名称,就是动物的叫声函数。
多态:
这个案例网上是没有的,属于无忌独创,当时在帮孩子辅导作业,小学科学,里面有一点内容是关于人的牙齿,说牙齿分为:门齿、犬齿、臼齿。
问闺女,为什么这么分呢?闺女说牙齿虽然都是用来咬食物,但是食物种类很多,咬碎需要的工具也不一样,门齿用来切割食物,如:苹果、梨;犬齿用来撕碎食物。
如肉类;臼齿用来磨碎食物,如犬齿撕碎的肉类,就需要再用臼齿来磨碎,然后送到食道,胃,小肠,大肠进行消化。我恍然大悟,这不就是Java面向对象里的多态吗?多完美啊。
这也很好说明了为什么会有多态出现,因为生活中就存在太多这种例子,所以需要多态来匹配解决。
Q2: java多态
得去理解对象创建的过程就知道实现多态java的代码了。虽然实现多态java的代码你i定义了为i=234,但是创建过程中这个i赋值过程是在调用父类构造方法之后。System.out.println("testAbstract()"+" "+i);这句话是在调用父类构造方法的时候调用的,调用的时候i并没有被赋值234,那i此时的值就是int的默认值0.
上面代码被解释后其实i=234赋值生效在public Atest(){//(3)调用子类构造方法
i=234;
System.out.println(i);
}
Q3: 用Java继承和多态实现编写代码
代码如下实现多态java的代码:
abstract class DongWu {
public abstract void info();
}
class Bird extends DongWu {
@Override
public void info() {
System.out.println("实现多态java的代码我是一只鸟。");
}
}
class Fish extends DongWu {
@Override
public void info() {
System.out.println("实现多态java的代码我是一条鱼。");
}
}
public class App5 {
public static void main(String[] args) {
DongWu bird = new Bird();
bird.info();
DongWu fish = new Fish();
fish.info();
}
}
关于实现多态java的代码和实现多态java的代码有哪些的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







