总结:
1.继承:允许子类去继承父类非私有化的属性和行为,关键字extends来实现,能发生继承的类,
关系上要满足is a xxx,(继承是发生在对象层面上的,所以子类对象被new出来,必然有父类对象new出来让子类继承)
2.继承的好处:a.减少代码的冗余b。允许开发者定义分等级层次的类
3.简单了解下super关键字:指代当前对象的父类对象
4.重写:子类不满足于父类继承过来的方法,用自己的方式去重写相关的方法体
5.重写和重载的区别:重写是两个类,重载是一个类
6.多态:同一个行为在不同对象身上不同的表现
7.多态的三个实现条件:a.要有继承b.要有方法重写c.父类引用指向子类对象
8.向上转型:父类引用指向子类对象好处:父类引用可以作为参数去接收各种子类对象,带来了减少代码冗余,提高了代码的可扩展性缺点:会把子类独有属性和方法隐藏
9.向下转型:你想找回子类对象隐藏的属性和方法,就需要做向下转型
能不能转?用instanceof判断下,然后强转在做向下转型时,强制要求必须要做instanceof判断Animal a= new Cat();if(a instanceof Cat){Cat c=(Cat)a;}else if(a instanceof Dog){Dog d=(Dog)a;}
练习:
第一步 新建一个Person类,包含name sex age,sleep();thinking();
第二步:新建宠物类Pet,name happyNum(体力值) 行为:eat();
第三步:新建狗类Dog,重写eat方法,吃东西会让happyNum值加3
第四步:新建狗类Cat,重写eat方法,吃东西会让happyNum值加2
第五步:扩展Person类,用来描述以下问题
张三有一个宠物狗,他喂了狗,狗happyNum加3
李四有一只宠物猫,她喂了猫,猫happyNum加2
新建测试类,测试上述过程题目:
1.定义一个动物类Animal,有动物类型属性type和动物发声的方法sound();定义基于动物类的狗类Dog和猫类 Cat,这两个类都要求覆盖父类的发声方法;定义AnimalDemo类,声明一个Animal对象,分别创建一个 Dog、Cat类的对象,然后通过Animal引用来访问Dog、Cat类对像的Sound()方法。2.设计一个名为Person的类和它的两个名为Student和Employee子类。Employee又有子类:教员Faculty和职 员类Staff。每个人都有姓名、地址、电话号码和电子邮件地址。学生有班级状态(大一、大二、大三和大 四)。将这些状态定义为常量。一个雇员有办公室、工资、和受聘日期。定义一个MyDate的类,包含数据域 year、month、day。教员有办公时间和级别。职员有职务称号。覆盖每个类中的toString方法,显示相应 的类名和人名。实现这些类。编写一个测试程序,创建Person、Student、Employee、Faculty和Staff, 并调用他们的并调用他们的toString方法。3.利用JAVA继承和多态性编写程序:分别利用不同的公式来计算长方形正方形圆的面积 4.动物园歌唱大赛动物园中有狗,猫,牛,羊四种动物狗唱歌:汪汪汪~~猫唱歌:喵喵喵~~牛唱歌:哞哞哞~~ 羊唱歌:咩咩咩~~比赛一共有10个动物参加先初始化10个不同的动物,然后让它们依次演唱5.关于继承与重载,请按下列要求编写代码.
1.继承的应用
1) 编写一个商品类Good;
2) 编写商品类的子类牛奶,增加了表示会员价格的属性,覆盖父类的计算折扣的方法,要求能计算出会员和非会 员折扣后各是多少钱.
3) 编写测试类,初始化牛奶的价格为3元,会员价格为2.6元,折扣的百分比为0.8,测试子类的应用,输出折扣后 的价格.2.重载
1) 编写一个类Telephone
2) 属性:号码和话费余额
3) 构造方法:一个带参的,一个不带参的
4) 方法:计算话费的方法telephoneCharge,计算话费的方式不同,一种是:3毛钱+(本次通话时间-3分钟) *1毛钱,另外一种是:每分钟的话费*本次通话时间.使用重载的方式完成两个同名方法的的编写.
5) 包含查询余额的方法.
6) 编写测试类,分别创建两个电话对象,调用不同的计算话费的方法,并显示余额.拓展:用java程序完成以场景:有一个主人(Master类),他养了两只宠物(Pet类),一只宠物是狗(Dog类),名字叫旺财,
另一只宠物是猫(Cat类),名字叫小花,现在有两种食物(Food类),分别是骨头(Bone)和鱼(Fish)。
主人分别给两只宠物喂食物,两只宠物厌食,狗只吃骨头(如果主人喂狗吃别的食物,
就显示狗不吃某某食物),猫只吃鱼(如果主人喂猫吃别的食物,就显示猫不吃某某食物)
主方法:
package com.wdd.week03.day02.test03;/*** 定义一个动物类Animal,有动物类型属性type和动物发声的方法sound();* 定义基于动物类的狗类Dog和猫类Cat,这两个类都要求覆盖父类的发声方法;* 定义AnimalDemo类,声明一个Animal对象,分别创建一个Dog、Cat类的对象,* 然后通过Animal引用来访问Dog、Cat类对像的Sound()方法。* * @author WDD**/public class AnimalDemo {public static void main(String[] args) {Animal d = new Dog();Animal c = new Cat();d.sound();c.sound();}}Animal类:
package com.wdd.week03.day02.test03;public class Animal {String type;// 类型public void sound() {System.out.println("叫叫叫....");}public Animal() {super();}public Animal(String type) {super();this.type = type;}@Overridepublic String toString() {return "Animal [type=" + type + "]";}}猫类:
package com.wdd.week03.day02.test03;public class Cat extends Animal {@Overridepublic void sound() {// TODO Auto-generated method stubSystem.out.println("喵喵喵....");}}狗类:
package com.wdd.week03.day02.test03;public class Dog extends Animal {@Overridepublic void sound() {// TODO Auto-generated method stubSystem.out.println("汪汪汪.....");}}
主方法:
package com.wdd.week03.day02.test05;/*** 利用JAVA继承和多态性编写程序: 分别利用不同的公式来计算长方形正方形圆的面积* * @author WDD**/public class Main {public static void main(String[] args) {Graphics r = new Rectangle(3, 5);r.getArea(r);System.out.println(r.toString());Graphics q = new Quadrate(5);q.getArea(q);System.out.println(q.toString());Graphics c = new Circle(10);c.getArea(c);System.out.println(c.toString());}
}package com.wdd.week03.day02.test05;//图形类
public class Graphics {double area;// 面积public void getArea(Graphics g) {System.out.println("该图形的面积为:" + g.area);}public Graphics() {super();}public Graphics(double area) {super();this.area = area;}@Overridepublic String toString() {return "Graphics [area=" + area + "]";}}package com.wdd.week03.day02.test05;//圆类public class Circle extends Graphics {double radius;// 半径@Overridepublic void getArea(Graphics g) {// TODO Auto-generated method stubSystem.out.println("圆的面积为:" + (3.14 * this.radius * this.radius));}public Circle() {super();}public Circle(double radius) {super();this.radius = radius;}@Overridepublic String toString() {return "Circle [radius=" + radius + ", area=" + (3.14 * this.radius * this.radius) + "]";}}package com.wdd.week03.day02.test05;//正方形类public class Quadrate extends Graphics {double length;// 正方形的边长@Overridepublic void getArea(Graphics g) {// TODO Auto-generated method stubSystem.out.println("正方形的面积为:" + (this.length * this.length));}public Quadrate() {super();}public Quadrate(double length) {super();this.length = length;}@Overridepublic String toString() {return "Quadrate [length=" + length + ", area=" + (this.length * this.length) + "]";}}package com.wdd.week03.day02.test05;//长方形类
public class Rectangle extends Graphics {double length;// 长double width;// 宽@Overridepublic void getArea(Graphics g) {// TODO Auto-generated method stubSystem.out.println("长方形的面积为:" + (this.length * this.width));}public Rectangle() {super();}public Rectangle(double length, double width) {super();this.length = length;this.width = width;}@Overridepublic String toString() {return "Rectangle [length=" + length + ", width=" + width + ", area=" + (this.length * this.width) + "]";}}
package com.wdd.week03.day02.test06;/*** 动物园歌唱大赛动物园中有狗,猫,牛,羊四种动物 * 狗唱歌:汪汪汪~~ * 猫唱歌:喵喵喵~~ * 牛唱歌:哞哞哞~~ * 羊唱歌:咩咩咩~~* 比赛一共有10个动物参加先初始化10个不同的动物,然后让它们依次演唱* * @author WDD**/public class Main {public static void main(String[] args) {Animal[] a = new Animal[10];a[0] = new Sheep();a[1] = new Cat();a[2] = new Dog();a[3] = new Cat();a[4] = new Cow();a[5] = new Cow();a[6] = new Dog();a[7] = new Sheep();a[8] = new Dog();a[9] = new Cat();for (int i = 0; i < a.length; i++) {a[i].song();}}}其他类略...
package com.wdd.week03.day02.test08;/*** 1) 编写一个类Telephone* 2) 属性:号码和话费余额* 3) 构造方法:一个带参的,一个不带参的* 4) 方法:计算话费的方法telephoneCharge,计算话费的方式不同,*     一种是:3毛钱+(本次通话时间-3分钟)*1毛钱,*     另外一种是:每分钟的话费*本次通话时间.*     使用重载的方式完成两个同名方法的的编写.* 5) 包含查询余额的方法.* 6) 编写测试类,分别创建两个电话对象,调用不同的计算话费的方法,并显示余额.* @author WDD**/public class Main {public static void main(String[] args) {Telephone tp = new Telephone("17856179093", 100);tp.telephoneCharge(60);Telephone tp1 = new Telephone("17856179827", 100);tp1.telephoneCharge(60, 0.2);}
}package com.wdd.week03.day02.test08;public class Telephone {String number; //号码double balance; //话费余额//计算话费的方法一public void telephoneCharge(double minTime) {System.out.println("本次通话时间为:" + minTime + "分钟.");System.out.println("本次通话累计扣除话费:" + (0.3 + (minTime - 3) * 0.1) + "元.");System.out.println("话费余额为:" + (this.balance -= (0.3 + (minTime - 3) * 0.1)) + "元.");}//计算话费的方法二public void telephoneCharge(double minTime,double minMoney) {System.out.println("本次通话时间为:" + minTime + "分钟.");System.out.println("本次通话累计扣除话费:" + (minTime * minMoney) + "元.");System.out.println("话费余额为:" + (this.balance -= (minTime * minMoney)) + "元.");}public Telephone() {super();}public Telephone(String number, double balance) {super();this.number = number;this.balance = balance;}@Overridepublic String toString() {return "Telephone [number=" + number + ", balance=" + balance + "]";}}

2020-09-08((继承+多态)总结和练习 )待补充...相关推荐

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

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

  2. RDKit | 基于RDKit(≥2020.09.1)的相似图绘制新方法

    导入库 from rdkit import Chem from rdkit.Chem import Draw from rdkit.Chem.Draw import SimilarityMaps fr ...

  3. python多态的三种表现形式_python小结----面向对象的三大特征(封装,继承,多态)

    面向对象的三大特征: 封装,继承,多态 面向对象的编程思想核心:高类聚,低耦合–程序的设计模式范畴 封装 什么是封装: 在面向对象编程的思想中,对代码进行高度封装,封装又叫包装 封装就是指将数据或者函 ...

  4. linux c 多态原理,看了所谓的面向对象中靠继承多态实现的所谓重用 哥笑了

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 这种重用不过还是引用别的类的函数或其它成员元素 我老听有些不懂编程却爱喷的人说什么面向对象代码可重用性"强" C写的代码 完全不能重用 ...

  5. 深度探索C++ 对象模型(7)-Data member的布局(无继承、继承无多态、继承多态、多层继承)

    无继承 继承无多态 继承多态 虚表 : 用来存放基类的每一个虚函数,再加上首位的一个slots(支持RTTI). 每个class object导入一个vptr,提供执行期的链接,使得每一个class ...

  6. python 参数类型的多态_【Python】面向对象:类与对象\封装\继承\多态

    六.Python面向对象--类与对象\封装\继承\多态 1.什么是面向对象编程 1.1 程序设计的范式:程序可控,易于理解 1.2 抽象并建立对象模型 1.3 程序是不同对象相互调用的逻辑.每个对象在 ...

  7. Winform打砖块游戏制作step by step第5节---重构代码,利用继承多态

    一 引子 为了让更多的编程初学者,轻松愉快地掌握面向对象的思考方法,对象继承和多态的妙用,故推出此系列随笔,还望大家多多支持. 二 本节内容---重构代码,利用继承多态 1. 主界面截图如下: 2.  ...

  8. Java继承多态经典案例分享

    今天动力节点java培训机构小编为大家分享Java继承多态经典案例,希望通过此文能够帮助到大家,下面就随小编一起看看Java继承多态经典案例. public class A { public Stri ...

  9. Python的继承多态

    Python的继承多态 文章目录 Python的继承多态 一.私有属性和私有方法 01. 应用场景及定义方式 02. 伪私有属性和私有方法 二.单例 01. 单例设计模式 单例设计模式的应用场景 02 ...

  10. CLR运行时细节 - 继承多态的实现

    关于多态不多解释了,在运行时决定和调用具体的实现,是面向对象的基础 设计模式的基础. 准备把继承多态和接口多态分开,因为从CLR实现的角度继承多态相比于接口多态要简单得多,也更容易理解,本篇只讨论继承 ...

最新文章

  1. 5年时间服务器从0到200,一个创业公司的架构野蛮生长史
  2. 书中自有BAT Offer!
  3. python list同步删除
  4. input 正则验证(摘)
  5. 量子导航即将上路:实时更新,全局优化,不仅更快还能解决拥堵
  6. Failed to install UTRUST.apk on device 'ZTE_SP920': Too many open files
  7. LeetCode之Sum of Left Leaves
  8. C# 实现一个可取消的多线程操作 示例
  9. HaProxy+Keepalived+Mycat高可用群集配置
  10. 使用 bind 搭建DNS 服务器
  11. java线程并发blockingqueue类使用示例
  12. Fresco简单的使用—SimpleDraweeView
  13. vue 头部组件监控页面来源
  14. vue 如何处理两个组件异步问题_Vue异步组件使用详解
  15. python复制查题_python面试题(复制的)
  16. 基于VMware vSphere的虚拟化平台,内存分配是如何实现的?
  17. Ceph分布式存储学习指南1.12 Lustre
  18. Google也是个人使用非商业?
  19. EaseUS Data Recovery Wizard 如何在Mac上恢复已删除文件?
  20. Java打包ZIP压缩包文件下载

热门文章

  1. SCSI、DeviceIoControl、SCSI_PASS_THROUGH、CDB
  2. java读文件几种方式_JAVA读取文件的几种方式
  3. 快手接口分析(一)——cookie获取
  4. png怎么批量转换成jpg格式?
  5. 一文读懂车载监控系统中的数据标注类型丨曼孚科技
  6. 微信小程序使用swiper制作左右滑动tabs导航
  7. 小程序弹窗阻止滑动的两种方法
  8. Oracle 模糊查询
  9. kdtree最简单易懂的介绍
  10. 面试记录之江西某一家公司