我有两个类: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 ();

tr.computeCentroid(rtr);

tr.draw();

rtr.computeCentroid(tr);

我预期的输出是:

Base::centroid

Base::draw

Base::centroid

但是,我得到的输出是:

Base::centroid

RightAngle::draw

Base::centroid

我的问题是,当tr.draw()调用RightAngleTr类的方法时,为什么tr.computeCentroid(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/20190609/1202738.html

java中继承和多态的实验,Java中的继承和多态相关推荐

  1. java的内存管理_操作系统实验——java内存管理

    1.Test.java import java.util.Scanner; public class Test { public static void main(String[] args) { T ...

  2. java继承和多态的实验报告_JAVA,继承和多态实验报告

    实验项目名称 : 继承和多态 ( 所属课程 : Java 语言程序设计 ) 院 系: 专业班级: 姓 名: 学号: 实验地点: 指导老师: 本实验项目成绩: 教师签字: 日期: 1.实验目的 (1)掌 ...

  3. java继承和多态的实验报告_Java继承与多态实验报告.doc

    Java继承与多态实验报告 西 安 邮 电 大 学 (计算机学院) 课内实验报告 实验名称: 继承与多态 专业名称: 计算机科学与技术 班 级: 计科1405班 学生姓名: 高宏伟 学 号: 指导教师 ...

  4. 在java面向对象编程中_谈一谈你对封装_继承_多态概念的理解_Java新职篇:面向对象编程的3个原则是什么?...

    原标题:Java新职篇:面向对象编程的3个原则是什么? 所有面向对象的编程语言都提供帮助你实现面向对象模型的机制,这些机制是封装,继承及多态性.现在让我们来看一下它们的概念. 封装 封装(Encaps ...

  5. java多态简单例子6_Java_6、面向对象——继承和多态

    继承 •继承是面向对象编程的三大特征之一,是一种基于已有类来创建新类的机制.由继承而得到的类称为子类(或派生类),被继承的类称为父类(或超类). •Java中每个类只允许有一个父类.语法如下:clas ...

  6. Java继承_Hachi君浅聊Java三大特性之 封装 继承 多态

    Hello,大家好~我是你们的Hachi君,一个来自某学院的资深java小白.最近利用暑假的时间,修得满腔java语言学习心得.今天小宇宙终于要爆发了,决定在知乎上来一场根本停不下来的Hachi君个人 ...

  7. java实验33 类的继承2_java实验2 类的继承性

    实验2 类的继承性 一.实验目的 掌握面向对象的继承性在Java中的实现方法:掌握super关键字的用法,体会抽象类和抽象方法的作用. 二.实验内容 1.程序理解: 1)类的继承 2)第4章课后编程第 ...

  8. java泛型类指定多个泛型_Java泛型中的多态

    java泛型类指定多个泛型 从作为Java程序员的早期开始,我们都知道如何实例化和使用Collection对象. 实例化为具体类的List接口将如下所示. List myArrayList = new ...

  9. java 抽象封装多态_java面向对象(封装,继承,多态,抽象,接口的定义和实现)...

    1.封装 在面向对象程式设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函式接口的实作细节部份包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定 ...

最新文章

  1. 第三百三十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—深度优先与广度优先原理...
  2. Matlab随笔之矩阵入门知识
  3. MongoDB 计划缓存的影响
  4. php读文阻塞,php socket编程 读完成后写阻塞
  5. 尼康d850相机参数测试软件,尼康 D850最全参数信息曝光 快来围观
  6. 毫米波雷达数据处理_基于毫米波雷达的桥梁静挠度采集系统
  7. 信息收集——指纹识别
  8. 【转】TCP/IP协议--TCP的超时和重传
  9. 项目运行报'vue-cli-service' 不是内部或外部命令,也不是可运行的程序 或批处理文件“
  10. [剑指Offer] 42.和为S的两个数字
  11. java writebytes()_Java ObjectOutputStream writeBytes()方法与示例
  12. 登录和注销、基于Session的购物车案例、验证码的使用、防止表单重复提交
  13. 2017-06-27
  14. loadrunner录制时web时,安全证书问题
  15. python语法使用方法_Python语法基础
  16. 开始菜单下的计算机怎么能看到盘符
  17. 网易邮箱服务器怎么注册,免费网易域名邮箱申请教程(图)
  18. PHP endif、endwhile、endfor、冒号、switch、foreach使用介绍、Heredoc 、Nowdoc
  19. 复制PS图层的样式到其它图层
  20. 什么是域名(Domain Name ) ?

热门文章

  1. TextView 添加Onclick 无效
  2. 【BZOJ】1630: [Usaco2007 Demo]Ant Counting(裸dp/dp/生成函数)
  3. IT创业迷魂圈:不要画饼充饥
  4. 用boson做vlan的单臂路由实验
  5. BCH两周年独立日已至,世界各地爱好者纷纷举办Meetup庆祝
  6. 五个指标看BCH,它距离“币圈金本位”还有多远?
  7. Android 手机适配
  8. Lua代码加密,防止代码反编译
  9. SpringCloud系列七:Hystrix 熔断机制(Hystrix基本配置、服务降级、HystrixDashboard服务监控、Turbine聚合监控)...
  10. android MVP模式简介