封装的概念:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现隐藏信息的操作和访问
封装的好处:
只能通过规定方法访问数据
隐藏类的实现细节
方便加入控制语句
方便修改实现
步骤 属性设为priva
创建读写方法 getter()
setter()
在方法中添加判断。
其中this关键字可以调方法调属性调有参和无参构造方法
例如
int a;
this.int=0;
this,show();
this();
this(0);
例题,完善宠物系统之前做的宠物系统需要完善一下例如规定健康值为0-100之间,如果小于0或者大于100则自动设置为80
首先编写狗Dog类
企鹅类Peg
测试类
狗类:

public class Dog {private String name;private int health;private int love;public static final String lbld="拉布拉多";public static final String xnr="雪纳瑞";String strain;public void show() {System.out.println("我的名字叫"+name+"\t"+"健康值是"+health+"\t"+"亲密度是"+love+"\t"+"种类是"+strain);}public void setName(String name){this.name=name;
}
public String getName(){return name;}public void setStrain(String strain){this.strain=strain;}public String getStrain(){return strain;}public void setHealth(int health){if (health<0||health>100){this.health=90;}else {this.health = health;}}public int getHealth(){return health;}public void setLove(int love){if (love<0||love>100){this.love=90;}else {this.love = love;}}public int getLove(){return love;}
}

企鹅类:

public class Peg {private String name;private int health;private int love;public static final String Qzai = "Q仔";public static final String Qmei = "Q妹";String sex;public void show() {System.out.println("我的名字叫" + name + "\t" + "健康值是" + health + "\t" + "亲密度是" + love + "\t" + "种类是" + sex);}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getHealth() {return health;}public void setHealth(int health) {if (health<0||health>100){this.health=80;}else {this.health = health;}}public int getLove() {return love;}public void setLove(int love) {if (love<0||love>100){this.love=80;}else {this.love = love;}}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}
}

测试类:

public class TestPet {public static void main(String[] args) {Scanner input=new Scanner(System.in);System.out.println("欢迎来到宠物店!");System.out.println("请输入要领养的宠物名字:");String name=input.next();System.out.println("请选择要领养的类型1狗狗2企鹅");int num=input.nextInt();switch (num){case 1:Dog dog=new Dog();System.out.println("请选择种类1.拉布拉多/2.雪纳瑞");num=input.nextInt();String strain=num==1?dog.lbld:dog.xnr;dog.setName(name);dog.strain=strain;dog.setHealth(1000000000);dog.setLove(-11000);dog.show();break;case 2:Peg peg=new Peg();System.out.println("请选择性别1.Q仔/2.Q妹");num=input.nextInt();String sex=num==1?peg.Qzai:peg.Qmei;peg.setName(name);peg.sex=sex;peg.setHealth(1000000000);peg.setLove(-11000);peg.show();break;}}
}

由于在setter方法中加了约束条件所以默认为80
结果:


继承:
父类与子类
好处:方便修改代码
减少代码量
子类访问父类成员
访问父类构造方法
super关键字
在子类构造方法中调用必须为第一句
子类不能继承父类的private成员。不能继承构造方法,不在同包
访问修饰符中
public最大
其次是
protected
默认为friendly
最小是private
多重继承关系初始化顺序
父类属性------父类构造方法----子类属性-----子类构造方法
如何使用继承?
符合is-a的关系
方法重写
子类中 方法名相同 参数相同返回值相同 访问修饰符不能比父类大。

例题
麻雀类属性颜色名字
企鹅类属性颜色名字
从中找出一样的属性,定义鸟类
方法麻雀会飞会吃
企鹅会游泳会吃

首先是父类鸟类:

public class Bird {String name;String color;public Bird(){}public Bird(String name, String color) {this.name = name;this.color = color;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}public String fly(){String fly="我会飞";return fly;}public String eat(){String eat="我吃的不是饭是寂寞";return eat;}public void print(){System.out.println("我是鸟"+name+fly()+"我的颜色是"+color+"色");System.out.println("我是鸟"+name+eat());}
}

企鹅类:

public class Penguin extends Bird{public Penguin(){}public Penguin(String name, String color) {super(name, color);}public String  swim(){String swim="虽然我不会飞,但我比鸟游得快";return swim;}public void print(){System.out.println("我是企鹅"+name+"我太胖了,所以不会飞"+"我的颜色是"+color+"色");System.out.println("我喜欢吃");System.out.println(swim());}}

继承父类鸟类的name和color属性
方法为游泳
子类调用父类有参构造方法时父类一定要有无参构造方法否则会报错子类

麻雀类

public class Sparrow extends Bird{public Sparrow(){}public Sparrow(String name, String color) {super(name, color);}public void print() {System.out.println("我是麻雀"+name+"我动作敏捷飞的比火箭快我的颜色是"+color+"色");System.out.println("我不仅吃种子,也吃害虫");}
}

继承父类鸟类的name和color属性
方法为飞,这里的飞方法显示效果与父类不一样,如果一样也是可以调用的不用新建

编写测试类

public class TestBird {public static void main(String[] args) {Bird bird=new Bird();bird.setName("张三");bird.setColor("黄");bird.print();System.out.println("========================");Sparrow sparrow=new Sparrow();sparrow.setName("李四");sparrow.setColor("蓝");sparrow.print();System.out.println("=========================");Penguin penguin=new Penguin();penguin.setName("王五");penguin.setColor("绿");penguin.print();}
}

结果为:

面向对象(4)封装与继承相关推荐

  1. python面向对象编程 -- 封装、继承

    面向对象编程 -- 封装.继承 面向对象编程三要素:封装.继承和多态.本文主要看和封装.继承相关的概念:在python中多态的概念比较模糊,本文不做讨论. 1 封装 封装:将数据和操作组装到一起,对外 ...

  2. python面向对象编程(封装与继承)

    一. 面向过程编程语言 "面向过程"(Procedure Oriented)是一种以过程为中心的编程思想.分析出解决问题所需要的步 骤,然后用函数把这些步骤一步一步实现,使用的时候 ...

  3. 如何理解面向对象的封装、继承、多态

    如何理解面向对象的封装.继承.多态 面向对象可以说是一种对现实是事物的抽象,将一类事物抽象成一个类,类里面包含了这类事物具有的公共部分,以及我们对这些部分的操作,也就是对应的数据和过程. 面向对象思想 ...

  4. W6_面向对象_封装_继承_多继承_多态

    W6_面向对象_封装_继承_多继承_多态 80.81.82.83.第02章节-Python3.5-面向对象介绍 84.第05章节-Python3.5-实例变量与类变量 85.第06章节-Python3 ...

  5. Go 学习笔记(36)— 基于Go方法的面向对象(封装、继承、多态)

    Go 面向对象编程的三大特性:封装.继承和多态. 封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式 继承:使得子类具有父类的属性和方法或者重新定义.追加属性和方法等 多态:不同对象中同种行为的不 ...

  6. extend implements多个对象_「每天三分钟跟我学Java」之Java面向对象的封装、继承、多态...

    Java是面向对象的语言,深入理解面向对象的概念,对Java的开发至关重要.本节我们着重看下面向对象的三大特性,封装.继承.多态. 一.封装 封装是将类的某些信息隐藏在类内部,不允许外部程序直接访问, ...

  7. java程序员从笨鸟到菜鸟之_Java程序员从笨鸟到菜鸟之(二)面向对象之封装,继承,多态(上)...

    Java是一种面向对象的语言,这是大家都知道的,他与那些像c语言等面向过程语言不同的是它本身所具有的面向对象的特性--封装,继承,多态,这也就是传说中的面向对象三大特性 一:从类和对象开始说起: Oo ...

  8. 黑马程序员---面向对象上(封装,继承,多态)

    ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS ...

  9. Java SE(六)之面向对象(封装,继承,多态,接口)

    文章目录 类和对象 1. 创建一个类 2. 创建一个对象 3. 访问变量和方法 4. some tips 封装 修饰符 1. 访问控制修饰符 2. 非访问修饰符 (1)static (2)final ...

  10. 【Python从零到壹】面向对象的封装,继承和多态

    面向对象的三大特征:封装,继承,多态 文章目录 1. 封装 2. 继承 多态的实现 封装: 提高程序的安全性 将数据(属性)和行为(方法)包装到类对象中,在方法内部对属性进行对象的外部调用方法. 这样 ...

最新文章

  1. 正则表达式中$1,$2 ===算是什么意思
  2. python库scikit-learn线性回归模型代码
  3. 使用keepalived加lvs做负载均衡,访问后端的服务器,2分钟后超时,需要重新登录...
  4. 使用caffe训练faster-rcnn时遇到的问题总结
  5. Message 消息提示
  6. ccs加载out文件_类加载流程、类加载机制及自定义类加载器详解
  7. Java学习笔记29(IO字符流,转换流)
  8. 信息学奥赛一本通 1141:删除单词后缀 | OpenJudge NOI 1.7 20
  9. Spring Data JPA 动态拼接条件的通用设计模式
  10. k近邻法的实现(kd树)-相关问题梳理
  11. 这位曾指责乔布斯的怪老头,推出的AppleScript比Windows还要快!
  12. Bailian2996 选课【置换】
  13. 织梦(Dedecms) V5.6 plus/carbuyaction.php 本地文件包含漏洞
  14. linux 嵌入式 快照_定制嵌入式 Linux 发行版
  15. 旧的起点(开园说明)
  16. 清微智能CTO欧阳鹏:架构创新是通往高性能计算芯片必由之路|量子位·视点分享回顾...
  17. 微信小程序服务器和app互通,解读:App 与小程序的互通能力和限制
  18. 七彩虹将星x15xs 2022款 怎么样
  19. python如何求矩阵逆运算_Sympy复矩阵求逆/运算
  20. 基于ROS节点实现USB camera在web显示

热门文章

  1. 【考研英语语法】祈使句
  2. Mac Safari 配置 IE 代理 (支持 IE 调试)
  3. 三年黑盒测试工程师对嵌入式软件测试的理解
  4. 分数的计算机题,分数问题
  5. 在线免费网盘空间统计
  6. 九、软考·系统架构师——系统架构质量及评估
  7. Hyperledger Fabric从源码分析背书提案过程
  8. 关于“一个SAPer的网络日志”
  9. Suzy找到实习了吗Day 11 |栈与队列中途 20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值
  10. floorplan 和 place的区别