• 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 }

    测试结果:

     

  • 相关阅读:
    Tomcat支持多少并发
    Redis高可用架构—Keepalive+VIP
    MapReduce运行原理
    hihoCoder 1015 KMP算法(kmp)
    <html>
    UI--仿IOS控件之ActionSheet样式 and more..
    redis集群
    mongodb及mongoclient在win7下的编译和使用
    @property与@synthesize的差别
    传智播客c/c++公开课学习笔记--邮箱账户的破解与邮箱安全防控
  • 原文地址:https://www.cnblogs.com/WhiperHong/p/10742592.html
Copyright © 2020-2023  润新知