文章目录

  • 1.使用继承
    • 1.1 设计类图
    • 1.2 类代码
      • 1.2.1 Pet类代码
      • 1.2.2 Dog类代码
      • 1.2.3 Penguin类代码
    • 1.3 第一阶段总结
  • 2.抽象类
  • 3 改进代码,实现宠物店功能
    • 3.1 实现效果
    • 3.2 实现代码

本节我们将实现一个小的宠物店系统,可以领养小狗和企鹅。

1.使用继承

1.1 设计类图

如果不使用继承

我们两种宠物有很多相同的属性和方法,所以我们创建一个Pet类作为它们的子类。改进后类图

1.2 类代码

1.2.1 Pet类代码

package petShop;public class Pet {private String name;//成员变量private int health;private int love;public Pet() {// TODO Auto-generated constructor stubhealth=100;love=0;}//无参构造方法,默认健康值为100,亲密度为0public Pet(String name, int health, int love) {super();this.name = name;this.health = health;this.love = love;}//带了三个参数的构造方法可以直接赋初值//set和get方法public String getName() {return name;}public void setName(String name) {this.name = name;}public int getHealth() {return health;}public void setHealth(int health) {this.health = health;}public int getLove() {return love;}public void setLove(int love) {this.love = love;}//print方法可以打印宠物的属性public void print(){System.out.println("宠物的自白:");System.out.println("我的名字叫"+name+",我的健康值是"+health+",我和主人的亲密程度是"+love);};public static void main(String[] args) {// TODO Auto-generated method stub}
}

1.2.2 Dog类代码

package petShop;public class Dog extends Pet{//继承Petprivate String strain;//定义品种属性//两种构造方法public Dog() {// TODO Auto-generated constructor stub}public Dog(String name, int health, int love,String strain) {super(name, health, love);//super可以直接访问父类的构造方法this.strain = strain;}//get、set方法public String getStrain(){return strain;}public void setStrain(String strain) {this.strain = strain;}//重新父类中的print()方法@Overridepublic void print() {// TODO Auto-generated method stubsuper.print();System.out.println("我是一只"+strain);}public static void main(String[] args) {// TODO Auto-generated method stubDog d1 = new Dog("欧欧",100, 0, "雪纳瑞犬");d1.print();}}

输出结果

1.2.3 Penguin类代码

//与Dog类相似
package petShop;public class Penguin extends Pet{private String sex;public Penguin() {// TODO Auto-generated constructor stub}public Penguin(String name, int health, int love,String sex) {super(name, health, love);this.sex = sex;}public String getSex(){return sex;}public void setSex(String sex){this.sex = sex;}@Overridepublic void print() {// TODO Auto-generated method stubsuper.print();System.out.println("我的性别"+sex);}public static void main(String[] args) {// TODO Auto-generated method stubPenguin p1 = new Penguin("楠楠", 100, 0, "Q妹");p1.print();}}

输出结果

1.3 第一阶段总结

继承可以减少我们的代码量,如果两个类存在许多相同的属性和方法,我们可以为其创造一个父类。
子类可以继承父类的属性和方法,但不是全部,有3类主要的内容无法被继承:1.构造方法(只能使用super来调用)2.private修饰的属性和方法 3.默认修饰符情况下,子类不在父类包中时也无法继承。

可以使用super关键字类访问父类中的方法,但是必须是在第一行。this是用来访问自己的构造方法,也需要放在第一行。所以在一个构造方法里面不可以同时有this和super。
如果我们不写super构造方法,那么系统自动会默认第一行是super(),若父类没有无参构造方法,那么会发生错误。

2.抽象类

如果我们不想让父类实例化,我们可以将其定义为是抽象类。在本次操作中,Pet类的实例化是没有意义的,因为不够具体,所以我们可以将其设为抽象类。

3 改进代码,实现宠物店功能

3.1 实现效果

3.2 实现代码

public static void main(String[] args) {// TODO Auto-generated method stubScanner in = new Scanner(System.in);System.out.println("欢迎您来到宠物店");System.out.println("请输入要领养的宠物的名字");String name = in.next();//用name变量存储名字System.out.println("请选择要领养的宠物类型(1、狗狗2、企鹅)");int type=in.nextInt();if(type==1){System.out.println("请选择狗狗的品种(1、阿拉斯加 2、哈士奇)");type=in.nextInt();String strain;if(type==1) strain="阿拉斯加";else if(type==2) strain="哈士奇";else{System.out.println("请输入正确的序号");return;}Dog p1 = new Dog();p1.setName(name);p1.setStrain(strain);p1.print();}else if(type==2){System.out.println("请选择企鹅的性别(1、Q仔 2、Q妹)");type=in.nextInt();String sex;if(type==1) sex="Q仔";else if(type==2) sex="Q妹";else{System.out.println("请输入正确的序号");return;}Penguin p1 = new Penguin();p1.setName(name);p1.setSex(sex);p1.print();}else{System.out.println("请输入正确的序号");}}

学会继承、多态、封装(1)——Java实现宠物店(领养宠物)相关推荐

  1. 27.练习:多态:多态实现宠物店领养宠物

    27.练习:多态:多态实现宠物店领养宠物 学习:第7遍 1.练习:多态实现宠物店领养宠物 //领养宠物 public class Test{ public static void main(Strin ...

  2. C# 子类实例化基类 基类使用不了子类的方法_C#学习笔记09--构造方法/析构方法/继承/多态/封装...

    一.构造方法 当创建一个类时, 系统会自动创建一个默认的无参构造方法, 这个方法和类同名, 在创建对象的时候自动调用. 默认的构造方法里面什么也没有, 重写之后就可以在创建对象的时候同时搞点事情了. ...

  3. Python全栈开发——面向对象的三大特性(继承 多态 封装)

    1.继承 1.两层意思 改变和扩展(详细看随笔继承和组合) 2.多态(体现在运行时的状态) 1.不同的类可以调用相同的方法,得到不同的结果 2.实际上是继承的一种体现机制 class H2o:def ...

  4. java 领养宠物_用java编的实现宠物店领养宠物的功能

    一: public class Pet { private String name; private int health; private int love; PetShop(String name ...

  5. Day55-每日一道Java面试题-Java 面向对象编程三大特性: 封装 继承 多态

    Java 面向对象编程三大特性: 封装 继承 多态 封装 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问.但是如果一个类没有 ...

  6. c语言编程 菲薄拉,C语言设计模式-封装-继承-多态

    快过年了,手头的工作慢慢也就少了,所以,研究技术的时间就多了很多时间,前些天在CSDN一博客看到有大牛在讨论C的设计模式,正好看到了,我也有兴趣转发,修改,研究一下. 记得读大学的时候,老师就告诉我们 ...

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

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

  8. java封装继承多态语法,GO语言中封装,继承,和多态

    ##封装 go中的封装和java的不太一样,在go里面是没有java中的class,不过可以把struct看成一个类,封装可以简单地看作对struct的封装,如下 type obj1 struct { ...

  9. 一文带你了解java面向对象的三大特性:继承、封装、多态

    文章目录 1.继承 2.封装 3.多态 本篇文章以同步到:https://www.bithachi.cn/posts/c72fe2cc.html 1.继承 继承是类与类的一种关系,子类拥有父类的所有( ...

最新文章

  1. 围绕云计算 虚拟化技术又呈现新面貌
  2. codevs 1082 线段树区间求和
  3. 建模案例:最优截断切割问题
  4. 大型分布式系统需要考虑的问题
  5. leetcode 494. Target Sum | 494. 目标和(动态规划)
  6. 记录excel翻车现场
  7. CentOS6.5与XP双系统安装
  8. Shell子程序结构,函数
  9. vue实现分屏_VUE视频怎么分镜 VUE视频如何进行分镜编(图文步骤)
  10. MAC 及 Python 快捷键
  11. bat脚本注释多行_bat批处理的注释语句
  12. Navicat for MySQL注册码
  13. 学习方法推荐——番茄工作法
  14. 《21世纪资本论》阅读摘要
  15. PySpark | RDD
  16. java计算机毕业设计漫画网站系统源码+系统+mysql数据库+lw文档
  17. 云南农业大学matlab,云南农业大学关于公第七届学生科技.doc
  18. 天气显示服务器不可用,Windows7系统小工具天气不显示提示所在的地区无法使用服务...
  19. web安全问题-1.安全世界观
  20. 遥感基础知识——电磁波

热门文章

  1. 数学公式截图识别神器Mathpix无限使用教程
  2. 架设安装禾匠点企来客服系统遇到的问题,以及解决办法!
  3. 从零开始打造一款基于SpringBoot+SpringCloud的后台权限管理系统
  4. 芯片LM339,LM339D,LM339A的区别
  5. 3Dmax脚本仿真光场相机
  6. 苹果CEO库克到访今日头条 与张一鸣谈笑风生
  7. 5G时代,有哪些热门词汇,是5G人才必须知道的!
  8. 关闭百度广告联盟广告推送
  9. windows 系统端口不通,改不了IP(麦咖啡mac)
  10. 华农c语言作业,90%的人所不知道的华农之挂科篇