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 ();
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中的继承和多态相关推荐
- java的内存管理_操作系统实验——java内存管理
1.Test.java import java.util.Scanner; public class Test { public static void main(String[] args) { T ...
- java继承和多态的实验报告_JAVA,继承和多态实验报告
实验项目名称 : 继承和多态 ( 所属课程 : Java 语言程序设计 ) 院 系: 专业班级: 姓 名: 学号: 实验地点: 指导老师: 本实验项目成绩: 教师签字: 日期: 1.实验目的 (1)掌 ...
- java继承和多态的实验报告_Java继承与多态实验报告.doc
Java继承与多态实验报告 西 安 邮 电 大 学 (计算机学院) 课内实验报告 实验名称: 继承与多态 专业名称: 计算机科学与技术 班 级: 计科1405班 学生姓名: 高宏伟 学 号: 指导教师 ...
- 在java面向对象编程中_谈一谈你对封装_继承_多态概念的理解_Java新职篇:面向对象编程的3个原则是什么?...
原标题:Java新职篇:面向对象编程的3个原则是什么? 所有面向对象的编程语言都提供帮助你实现面向对象模型的机制,这些机制是封装,继承及多态性.现在让我们来看一下它们的概念. 封装 封装(Encaps ...
- java多态简单例子6_Java_6、面向对象——继承和多态
继承 •继承是面向对象编程的三大特征之一,是一种基于已有类来创建新类的机制.由继承而得到的类称为子类(或派生类),被继承的类称为父类(或超类). •Java中每个类只允许有一个父类.语法如下:clas ...
- Java继承_Hachi君浅聊Java三大特性之 封装 继承 多态
Hello,大家好~我是你们的Hachi君,一个来自某学院的资深java小白.最近利用暑假的时间,修得满腔java语言学习心得.今天小宇宙终于要爆发了,决定在知乎上来一场根本停不下来的Hachi君个人 ...
- java实验33 类的继承2_java实验2 类的继承性
实验2 类的继承性 一.实验目的 掌握面向对象的继承性在Java中的实现方法:掌握super关键字的用法,体会抽象类和抽象方法的作用. 二.实验内容 1.程序理解: 1)类的继承 2)第4章课后编程第 ...
- java泛型类指定多个泛型_Java泛型中的多态
java泛型类指定多个泛型 从作为Java程序员的早期开始,我们都知道如何实例化和使用Collection对象. 实例化为具体类的List接口将如下所示. List myArrayList = new ...
- java 抽象封装多态_java面向对象(封装,继承,多态,抽象,接口的定义和实现)...
1.封装 在面向对象程式设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函式接口的实作细节部份包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定 ...
最新文章
- 第三百三十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—深度优先与广度优先原理...
- Matlab随笔之矩阵入门知识
- MongoDB 计划缓存的影响
- php读文阻塞,php socket编程 读完成后写阻塞
- 尼康d850相机参数测试软件,尼康 D850最全参数信息曝光 快来围观
- 毫米波雷达数据处理_基于毫米波雷达的桥梁静挠度采集系统
- 信息收集——指纹识别
- 【转】TCP/IP协议--TCP的超时和重传
- 项目运行报'vue-cli-service' 不是内部或外部命令,也不是可运行的程序 或批处理文件“
- [剑指Offer] 42.和为S的两个数字
- java writebytes()_Java ObjectOutputStream writeBytes()方法与示例
- 登录和注销、基于Session的购物车案例、验证码的使用、防止表单重复提交
- 2017-06-27
- loadrunner录制时web时,安全证书问题
- python语法使用方法_Python语法基础
- 开始菜单下的计算机怎么能看到盘符
- 网易邮箱服务器怎么注册,免费网易域名邮箱申请教程(图)
- PHP endif、endwhile、endfor、冒号、switch、foreach使用介绍、Heredoc 、Nowdoc
- 复制PS图层的样式到其它图层
- 什么是域名(Domain Name ) ?
热门文章
- TextView 添加Onclick 无效
- 【BZOJ】1630: [Usaco2007 Demo]Ant Counting(裸dp/dp/生成函数)
- IT创业迷魂圈:不要画饼充饥
- 用boson做vlan的单臂路由实验
- BCH两周年独立日已至,世界各地爱好者纷纷举办Meetup庆祝
- 五个指标看BCH,它距离“币圈金本位”还有多远?
- Android 手机适配
- Lua代码加密,防止代码反编译
- SpringCloud系列七:Hystrix 熔断机制(Hystrix基本配置、服务降级、HystrixDashboard服务监控、Turbine聚合监控)...
- android MVP模式简介