Java基础--面向对象编程2(封装)
1.封装的定义:
封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。
2. 为什么需要封装?封装的作用和含义?
首先思考一个问题:当我们要看电视时,只需要按一下开关和换台就可以了。有必要了解电视机内部的结构吗?有必要碰碰显像管吗?
答案显然是否定的。隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。
我们程序设计要追求“高内聚,低耦合”。高内聚是类的内部数据操作细节自己完成,不允许外部干涉;低耦合是仅暴露少量的方法给外部使用。
3.程序封装的步骤
[1]属性私有化
在声明类的属性时在用private进行修饰。
[2]提供公共的设置器和访问器
在类中添加set()方法和get()方法充当公共的设置器和访问器。
[3]在设置器和访问器中添加业务校验逻辑
在set()方法和get()方法中设置判断语句,对对象中输入的属性值进行判断,过滤掉错误的数据。
4.实例
以下程序为创建一个Dog类:
a.在属性声明时,对属性进行private修饰进行私有化。
b.通过添加setName(String name)方法,对当对象的name属性值为空时,进行系统提醒并赋予默认值。同理,setHealth(int health)和setLove(int love)方法对health和love属性值进行数值限制,当这2个对象的属性值超过100和小于0时,系统会进行提醒并默认赋值。
public class Dog{
private String name;
private String strain;
private int health;
private int love;
public void setName(String name){
if(name.equals("")){
System.out.println("宠物名字不能没有名字,系统默认将宠物取名为天天");
this.name="天天";
}else{
this.name=name;
}
}
public String getName(){
return this.name;
}
public void setStrain(String strain){
this.strain=strain;
}
public String getStrain(){
return this.strain;
}
public void setHealth(int health){
if(health>100 || health<0){
System.out.println("宠物健康值输入有误,系统默认将健康值设定为60");
this.health=60;
}else{
this.health=health;
}
}
public int getHealth(){
return this.health;
}
public void setLove(int love){
if(love>100||love<0){
System.out.println("宠物亲密度输入有误,系统默认将亲密度设定为60");
this.love=60;
}else{
this.love=love;
}
}
public int getLove(){
return this.love;
}
public Dog(){
}
public Dog(String strain){
this.strain =strain;
}
public Dog(String name,String strain,int health,int love){
this(strain);
this.setName(name);
this.setHealth(health);
this.setLove(love);
}
public void showInfo(){
System.out.print("我的名字叫"+this.name);
System.out.print(",我的品种是"+this.strain);
System.out.print(",健康值:"+this.health);
System.out.print(",亲密度:"+this.love);
}
}
import java.util.Scanner;
public class Test01{
public static void main(String[] args){
Scanner input =new Scanner(System.in);
System.out.println("请输入狗狗的名字:");
String name=input.next();
System.out.println("请输入狗狗的品种:");
String strain=input.next();
System.out.println("请输入狗狗的健康值:");
int health=input.nextInt();
System.out.println("请输入狗狗的亲密度:");
int love=input.nextInt();
Dog dog =new Dog(name,strain,health,love);
dog.showInfo();
}
}
测试结果:


Java基础--面向对象编程2(封装)的更多相关文章
- Java基础--面向对象编程1(类与对象)
1.类(class)的定义 类是对一组具有相同特征和行为的对象的抽象描述. 在程序中,引入类的概念,就是为了快速生成更多的具有相同特性和行为的事物. 2.对象(object)的定义 对象是类的具体实现 ...
- 1.Java基础-面向对象编程思想(封装继承多态接口)
封装: 1.定义:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别. 2.封装的目的是:增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一特定的 ...
- Java基础--面向对象编程3(继承)
1.继承的作用 为了提取两个类中公共的代码,可以使用继承抽取重复性的代码到一个公共类中. 这个公共的类称为父类(super class),继承于父类的类称为子类(sub class). 2.java继 ...
- Java基础--面向对象编程4(多态)
1.多态的概念 多态是指程序中的同一引用类型,使用不同的实例而执行结果不同的. 同一个类型:一般指父类 不同的实例:不同的子类实例 执行结果不同:针对同一方法执行的结果不同 package cn.sx ...
- Java基础-面向对象第一特性之封装(Encapsulation)
Java基础-面向对象第一特性之封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.理解什么是面向过程和面向对象 面向过程与面向对象都是我们编程中 ...
- java基础面向对象之类与对象
java基础面向对象之类与对象 2017-01-14 1.面向对象的基本概念 以一种组建化的形式进行代码设计 1)在面向对象程序设计中包含有如下几种特性 •封装性:保护内部结构的安全性 •继承性:在已 ...
- 大数据技术之_16_Scala学习_04_函数式编程-基础+面向对象编程-基础
第五章 函数式编程-基础5.1 函数式编程内容说明5.1.1 函数式编程内容5.1.2 函数式编程授课顺序5.2 函数式编程介绍5.2.1 几个概念的说明5.2.2 方法.函数.函数式编程和面向对象编 ...
- JAVA的面向对象编程
JAVA的面向对象编程 面向对象主要针对面向过程. 面向过程的基本单元是函数. 什么是对象:EVERYTHING IS OBJECT(万物皆对象) 全部的事物都有两个方面: 有什么(属性):用来描写叙 ...
- 第二十七节:Java基础面向对象-静态,单例模式,继承详情知识点
前言 Java基础面向对象-静态,单例模式,继承详情知识点.静态-static关键字,static变量,静态代码块,代码块(不加静态),对象创建过程,单例模式,继承. 静态-static关键字 // ...
随机推荐
- Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)
Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成) 动态表单生成 ElementUI官网引导 Element表单生成 Element动态增减表单,在线代码 关键配置 templa ...
- Scrapy 框架流程详解
框架流程图 Scrapy 使用了 Twisted 异步非阻塞网络库来处理网络通讯,整体架构大致如下(绿线是数据流向): 简单叙述一下每层图的含义吧: Spiders(爬虫):它负责处理所有Respon ...
- 猴子吃桃儿问题(C#)
猴子第一天摘了许多个桃子,先吃了所有桃子的一半,后又吃了一个:第二天又吃了剩下桃子的一半,后又吃了一个……第十天,剩1个桃子.问:猴子第一天摘了多少个桃子? 本程序对其做了修改,天数和吃一半后又吃了一 ...
- gcc/g++ 编译参数
1, -E(大写),预处理 例子:gcc -E test.cpp -o test.i 预处理,把程序里的#开头的替换掉,比如#include,然后生成test.i 2,-P(大写),去掉预处理生成的杂 ...
- 数字信号处理专题(2)——利用FPGA进行基本运算及特殊函数定点运算
一.前言 FPGA以擅长高速并行数据处理而闻名,从有线/无线通信到图像处理中各种DSP算法,再到现今火爆的AI应用,都离不开卷积.滤波.变换等基本的数学运算.但由于FPGA的硬件结构和开发特性使得其对 ...
- 定义工作,解读自我——IT帮2019年2月线下活动回顾
本次活动是在北京和深圳两个分站同步进行的,IT团建委员会负责策划和组织,北京站由帮主周老师.王兵老师主导,深圳站由副帮主兼深圳站长陈焕老师主导. 几位老师都是有着丰富的工作经历和人生体验的导师,他们不 ...
- mac上修改host
host文件下载地址: https://github.com/highsea/Hosts/blob/master/hosts https://github.com/racaljk/hosts 备份ma ...
- UOJ #269. 【清华集训2016】如何优雅地求和
UOJ #269. [清华集训2016]如何优雅地求和 题目链接 给定一个\(m\)次多项式\(f(x)\)的\(m+1\)个点值:\(f(0)\)到\(f(m)\). 然后求: \[ Q(f,n,x ...
- python从开始到放弃的途中一直很菜的day13
一直很菜的今天又来了两个新的概念,一个是装饰器,一个是推导式,装饰器好比女生出门前需要化妆的准备,推导式也称为生成式.先说装饰器吧,装饰器其实本质也是一个函数,并用@+函数名装饰到其他函数上,当这个其 ...
- 转:互斥锁解决同时上传数据丢失BUG
互斥锁:在一个线程修改变量时加锁,则其他变量阻塞,等待加锁的变量解锁后再执行,避免数据覆盖或者其他的异常情况. 原子操作: 所谓原子操作是指不会被线程调度机制打断的操作:这种操作一旦开始,就一直运行到 ...