Java基础--面向对象编程2(封装)

时间:2023-02-15 14:09:24

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 }

测试结果:

Java基础--面向对象编程2(封装)

 

 

 

Java基础--面向对象编程2(封装)