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时,系统会进行提醒并默认赋值。
1 public class Dog{ 2 private String name; 3 private String strain; 4 private int health; 5 private int love; 6 public void setName(String name){ 7 if(name.equals("")){ 8 System.out.println("宠物名字不能没有名字,系统默认将宠物取名为天天"); 9 this.name="天天"; 10 }else{ 11 this.name=name; 12 } 13 } 14 public String getName(){ 15 return this.name; 16 } 17 public void setStrain(String strain){ 18 this.strain=strain; 19 } 20 21 public String getStrain(){ 22 return this.strain; 23 } 24 public void setHealth(int health){ 25 if(health>100 || health<0){ 26 System.out.println("宠物健康值输入有误,系统默认将健康值设定为60"); 27 this.health=60; 28 }else{ 29 this.health=health; 30 } 31 } 32 public int getHealth(){ 33 return this.health; 34 } 35 public void setLove(int love){ 36 if(love>100||love<0){ 37 System.out.println("宠物亲密度输入有误,系统默认将亲密度设定为60"); 38 this.love=60; 39 }else{ 40 this.love=love; 41 } 42 } 43 public int getLove(){ 44 return this.love; 45 } 46 public Dog(){ 47 48 } 49 50 public Dog(String strain){ 51 this.strain =strain; 52 } 53 public Dog(String name,String strain,int health,int love){ 54 this(strain); 55 this.setName(name); 56 this.setHealth(health); 57 this.setLove(love); 58 59 } 60 public void showInfo(){ 61 System.out.print("我的名字叫"+this.name); 62 System.out.print(",我的品种是"+this.strain); 63 System.out.print(",健康值:"+this.health); 64 System.out.print(",亲密度:"+this.love); 65 } 66 67 }
1 import java.util.Scanner; 2 public class Test01{ 3 public static void main(String[] args){ 4 Scanner input =new Scanner(System.in); 5 System.out.println("请输入狗狗的名字:"); 6 String name=input.next(); 7 System.out.println("请输入狗狗的品种:"); 8 String strain=input.next(); 9 System.out.println("请输入狗狗的健康值:"); 10 int health=input.nextInt(); 11 System.out.println("请输入狗狗的亲密度:"); 12 int love=input.nextInt(); 13 Dog dog =new Dog(name,strain,health,love); 14 dog.showInfo(); 15 } 16 }
测试结果: