1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > java中继承和多态的实验 Java中的继承和多态

java中继承和多态的实验 Java中的继承和多态

时间:2019-05-23 02:54:09

相关推荐

java中继承和多态的实验 Java中的继承和多态

我有两个类:Triangle和RightAngledTr. RightAngledTr继承自Triangle.代码如下:

三角类:

class Triangle {

public void draw() {

System.out.println(“Base::draw\n“);

}

public void computeCentroid(Triangle t) {

System.out.println Base::centroid\n“);

}

}

RightAngledTr类:

class RightAngledTr extends Triangle {

public void draw() {

System.out.println(“RightAngle::draw\n“);

}

public void computeCentroid(RightAngled t) {

System.out.println(RtAngle::centroid\n“);

}

}

在我的驱动程序中,我有以下几行代码:

Triangle tr= new RightAngledTr ();

RightAngledTr rtr= new RightAngledTr ();

puteCentroid(rtr);

tr.draw();

puteCentroid(tr);

我预期的输出是:

Base::centroid

Base::draw

Base::centroid

但是,我得到的输出是:

Base::centroid

RightAngle::draw

Base::centroid

我的问题是,当tr.draw()调用RightAngleTr类的方法时,为什么puteCentroid(rtr)会调用Triangle类的方法?

这没有意义. Liskov替代原则似乎不适用.

解决方法:

这就是java的工作方式. draw()方法被覆盖.

看看oracle documentation文章,了解这些概念.

An instance method in a subclass with the same signature (name, plus the number and the type of its parameters) and return type as an instance method in the superclass overrides the superclass’s method.

三角形(父级)包含RightAngledTr(子级)的引用,并且在子对象上调用draw()方法.它被称为重写功能.

孩子是父母的类型.父保持子实例调用子的重写方法.如果child中不存在method,则将调用parent方法.

覆盖是使用相同的签名重新定义基类(父)行为.如果更改子类中基类方法的签名,则称为重载.您已对其他方法执行了相同的操作:computeCentroid().

但是对于父和子中声明的相同变量,不要指望相同.

变量不会被覆盖.仅覆盖方法.

标签:java,inheritance,override,polymorphism

来源: https://codeday.me/bug/0609/1202738.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。