zoukankan      html  css  js  c++  java
  • Java从零开始学十三(封装)

    一、什么是封装,为什么要封装

    对面向对象而言:封装就是将方法和属性包装到一个程序单元中,并且这个单元以类的形式实现。

    简单讲:封闭就是将属性私有化,提供公有方法来访问私有属性

    封装的作用:

    • 封装反映和事物的相对独立性,封装在编程中的作用就是:使对象以外的部分不能随意更改对象的属性,从而有效避免了外部错误操作对此对象的影响
    • 提高松耦合性,代码重用性

    松耦合:把对象想象成一个电池,这个电池不仅可以在相机中使用,也可以在遥控器,吹风机和剃须发等中使用, 我们说电池的松耦合性是非常好,而实现如此好的松耦合的前提就是对象有很好的封装性

    二、封装的实现

    1. 属性私有化private
    2. 设置get/set方法
    3. 对属性设置必要的限制
    package com.pb.demo3;
    
    public class Person {
        private String name; //姓名
        private String sex;    //性别
        private int age;//年龄
    
        //设置getter和setter方法
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            if(sex.equals("男") || sex.equals("女")){
                //设置性别限制,不合法的值将提示错误
            this.sex = sex;
            }else{
                System.out.println("性别不合法,性别只能是:男或者女");
            }
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            if(age>0 && age<=150){
                //设置年龄限制
            this.age = age;
            }else{
                System.out.println("年龄只能在1-150岁之间");
            }
        }
        public Person() {
        
        }
        public Person(String name, String sex, int age) {
            this.name = name;
            this.sex = sex;
            this.age = age;
        }
        
        public void say(){
            System.out.println("自我介绍:");
            System.out.println("姓名:"+this.name);
            System.out.println("性别:"+this.sex);
            System.out.println("年龄:"+this.age);
        }
    
    }

    测试类:

    package com.pb.demo3;
    
    public class PersonTest {
    
        public static void main(String[] args) {
            Person person=new Person();
            person.setName("韩冰");
            //传入不合法的值
            person.setSex("中性");
            //传入不合法的值
            person.setAge(200);
            //调用普通方法输出
            person.say();
    
        }
    
    }

    结果:将提示错误

    性别不合法,性别只能是:男或者女
    年龄只能在1-150岁之间
    自我介绍:
    姓名:韩冰
    性别:null
    年龄:0

    从结果可以看出,不合法的值,将为该数据类型的初始值String 为null,int 为0

    也可以在构造方法中为值进行初始化,这样,设置值为不合法时,就会使用初始化的值

    public Person() {
            this.name = "无名氏";
            this.sex = "男";
            this.age = 22;
        }

    再执行错误的值传入时

    package com.pb.demo3;
    
    public class PersonTest {
    
        public static void main(String[] args) {
            Person person=new Person();
            person.setName("韩冰");
            //传入不合法的值
            person.setSex("中性");
            //传入不合法的值
            person.setAge(200);
            //调用普通方法输出
            person.say();
    
        }
    
    }

    结果:

    性别不合法,性别只能是:男或者女
    年龄只能在1-150岁之间
    自我介绍:
    姓名:韩冰
    性别:男
    年龄:22

  • 相关阅读:
    IOS中常见的Operation —— NSOperation
    动态语言,别再说不
    CoreImage的使用及常见滤镜工具(一)
    【iOS】用Layer创建一个三维模型以及拖动
    前端基础-html、css
    mysql数据库—索引
    mysql数据库—用户管理、pymysql模块
    mysql数据库—函数、数据备份、流程控制
    mysql数据库基本操作2
    mysql数据库—事务、存储过程
  • 原文地址:https://www.cnblogs.com/liunanjava/p/4295154.html
Copyright © 2011-2022 走看看