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(封装)的更多相关文章

  1. Java基础--面向对象编程1(类与对象)

    1.类(class)的定义 类是对一组具有相同特征和行为的对象的抽象描述. 在程序中,引入类的概念,就是为了快速生成更多的具有相同特性和行为的事物. 2.对象(object)的定义 对象是类的具体实现 ...

  2. 1.Java基础-面向对象编程思想(封装继承多态接口)

    封装: 1.定义:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别. 2.封装的目的是:增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一特定的 ...

  3. Java基础--面向对象编程3(继承)

    1.继承的作用 为了提取两个类中公共的代码,可以使用继承抽取重复性的代码到一个公共类中. 这个公共的类称为父类(super class),继承于父类的类称为子类(sub class). 2.java继 ...

  4. Java基础--面向对象编程4(多态)

    1.多态的概念 多态是指程序中的同一引用类型,使用不同的实例而执行结果不同的. 同一个类型:一般指父类 不同的实例:不同的子类实例 执行结果不同:针对同一方法执行的结果不同 package cn.sx ...

  5. Java基础-面向对象第一特性之封装(Encapsulation)

    Java基础-面向对象第一特性之封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.理解什么是面向过程和面向对象 面向过程与面向对象都是我们编程中 ...

  6. java基础面向对象之类与对象

    java基础面向对象之类与对象 2017-01-14 1.面向对象的基本概念 以一种组建化的形式进行代码设计 1)在面向对象程序设计中包含有如下几种特性 •封装性:保护内部结构的安全性 •继承性:在已 ...

  7. 大数据技术之_16_Scala学习_04_函数式编程-基础+面向对象编程-基础

    第五章 函数式编程-基础5.1 函数式编程内容说明5.1.1 函数式编程内容5.1.2 函数式编程授课顺序5.2 函数式编程介绍5.2.1 几个概念的说明5.2.2 方法.函数.函数式编程和面向对象编 ...

  8. JAVA的面向对象编程

    JAVA的面向对象编程 面向对象主要针对面向过程. 面向过程的基本单元是函数. 什么是对象:EVERYTHING IS OBJECT(万物皆对象) 全部的事物都有两个方面: 有什么(属性):用来描写叙 ...

  9. 第二十七节:Java基础面向对象-静态,单例模式,继承详情知识点

    前言 Java基础面向对象-静态,单例模式,继承详情知识点.静态-static关键字,static变量,静态代码块,代码块(不加静态),对象创建过程,单例模式,继承. 静态-static关键字 // ...

随机推荐

  1. HTTP各个status code是什么意思【已解决】

    在介绍状态码之前,要简单讲一下为什么要有状态码这个东西.计算机之间的通信以协议为共同基础,客户端和服务端都按照协议的约定进行通信.HTTP的状态码就在HTTP的协议内,规定了很多的状态.客户端请求服务 ...

  2. docker部署postgresql时,data目录不生效的问题探究

    今天用docker部署postgresql,用的是官方的镜像.结果挂载完 /var/lib/postgresql/data目录后,和容器里的目录其实并没有挂载成功. 母机上的目录并没有成功挂载到容器里 ...

  3. centos7的主机名配置

    centos7的主机名配置 方法一:通过配置文件/etc/hostname (重启后生效) 方法二:通过命令hostnamectl  set-hostname    新主机名(会自动把主机名改为小写) ...

  4. Python encode和decode

    今天在写一个StringIO.write(int)示例时思维那么一发散就拐到了字符集的问题上,顺手搜索一发,除了极少数以外,绝大多数中文博客都解释的惨不忍睹,再鉴于被此问题在oracle的字符集体系中 ...

  5. js 学习之路10:try异常处理和第一个js小程序

    try 语句测试代码块的错误. catch 语句处理错误. throw 语句创建自定义错误. 1. try/catch语句 catch语句用来捕获try代码块中的错误,并执行自定义的语句来处理它. 语 ...

  6. WinForm 双向数据绑定

    程序目标: 控件的属性值与对象的属性值双向绑定使窗口控件的属性值与对象的属性值保持一致.对窗口控件属性值更改后立即更新对象的属性值,对对象的属性值更改后立即更新窗口控件的属性值. 程序完整代码包:ht ...

  7. python科学计算库numpy和绘图库PIL的结合,素描图片(原创)

    # 导入绘图库 from PIL import Image #导入科学计算库 import numpy as np #封装一个图像处理工具类 class TestNumpy(object): def ...

  8. Python操作Excel 之 openpyxl

    一.基础 安装openpyxl 模块 pip install openpyxl 或者通过轮子安装 font(字体类):字号.字体颜色.下划线等 fill(填充类):颜色等 border(边框类):设置 ...

  9. JVN的理解

    写的很不错,通俗易懂:http://www.cnblogs.com/leefreeman/p/7344460.html

  10. 原生sql整理

    mysql -uroot -p #登录mysql命令password: #输入密码 mysql> #每条mysql命令后面都要加分号结尾show databases; #打印整个mysql数据库 ...