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. .net 获取时间十二进制与二十四进制

    [说明] visual studio工具,.net项目,获取时间 [易错问题] ①二十四小时制(HH小时大写) System.DateTime.Now.ToString("yyyy-MM-d ...

  2. vue环境搭建及项目介绍

    搭建开发环境(搭建开发环境前必须安装node.js): 1.安装vue脚手架工具 $ npm install -g vue-cli 2.创建项目(注意项目名字不要有大写字母) vue init < ...

  3. java.lang.IllegalArgumentException: Called attach on a child which is not detached: ViewHolder

    转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/10116298.html 在项目过程中出现了上述错误. 会出现这样的错误是在我使用: notifyItem ...

  4. coreRT 和 Native 编译netcore AOT程序

    AOT是预编译成本地程序,避免JIT动态编译存在的性能问题. netcore一个吸引人的项目,就是基于coreRt 运行时的本地编译技术,下面我来替大家尝试一下它究竟表现如何. <Project ...

  5. 周一04.3流程控制while循环

    #循环就是重复做某件事 1.条件循环:while,语法如下 while 条件: # 循环体 # 如果条件为真,那么循环体则执行,执行完毕后再次循环,重新判断条件... # 如果条件为假,那么循环体不执 ...

  6. 好的RESTful API的设计原则

    转载自一位大佬 英文原版 Principles of good RESTful API Design Good API design is hard! An API represents a cont ...

  7. C# out ref 用法总结

    C#里面的 out 和ref参数时常会用到,但对它们的区别比较模糊.所以总结一下.下面是测试代码: public void Start() { //outSum没必要赋值,赋值了也完全没用. //如果 ...

  8. QTableWidget class

    Help on class QTableWidget in module PyQt5.QtWidgets: class QTableWidget(QTableView)  |  QTableWidge ...

  9. codeforces#1152D. Neko and Aki's Prank(dp)

    题目链接: https://codeforces.com/contest/1152/problem/D 题意: 给出一个$n$,然后在匹配树上染色边,每个结点的所有相邻边只能被染色一次. 问,这颗树上 ...

  10. java易混淆知识小结

    1.java的基本数据类型,及所占字节和范围 byte:  字节型,占1个字节,8位,范围是   -2^7 ~   2^7-1 short:短整型,占2个字节,16位,范围是 -2^15 ~ 2^15 ...