美文网首页
第五章:面向对象基础——封装性 。

第五章:面向对象基础——封装性 。

作者: 孤意的学习笔记 | 来源:发表于2017-09-25 15:13 被阅读0次

本章目标

  • 掌握封装的产生目的
  • 掌握封装的实现
  • 掌握setter和getter方法的定义

1、具体内容

1.1、为什么要有封装?

封装就是保护内容。
保证某些属性和方法可以不被外部看见。

观察以下代码,是否存在问题?

class Person{
    String name ;           // 声明姓名属性
    int age ;               // 声明年龄属性
    public void tell(){
        System.out.println("姓名:" + name + ",年龄:" + age) ;
    }
};
public class EncDemo01{
    public static void main(String arsgh[]){
        Person per = new Person() ; // 声明并实例化对象
        per.name = "张三" ;           // 为name属性赋值
        per.age = -30 ;             // 为age属性赋值
        per.tell() ;
    }
};
输出结果:
姓名:张三,年龄:-30

从语法上没有问题,但是从实际角度看,以上的代码不符合要求。
不合适的根本原因在于属性可以直接被外部所访问

1.2、实现封装

  • 为属性封装private 属性类型 属性名称;
  • 为方法封装private 方法返回值 方法名称(参数列表){ }
class Person{
    private String name ;           // 声明姓名属性
    private int age ;               // 声明年龄属性
    public void tell(){
        System.out.println("姓名:" + name + ",年龄:" + age) ;
    }
};
public class EncDemo02{
    public static void main(String arsgh[]){
        Person per = new Person() ; // 声明并实例化对象
        per.name = "张三" ;           // 为name属性赋值
        per.age = -30 ;             // 为age属性赋值
        per.tell() ;
    }
};
编译时出现以下问题:
Error:(11, 12) java: name可以在Person中访问private
Error:(12, 12) java: age可以在Person中访问private

提示是一个私有的访问权限,则意味着,外部根本无法调用。

1.3、访问封装的内容

因为这些属性肯定要表示出一些实际的意义,那么这些意义的内容肯定应该由外部设定,所以在整个Java中对于封装性的访问就给出了一个明确的原则,此原则必须遵守。
被封装的属性如果需要被访问,则需要编写gettersetter方法完成。

  • 例如:现在有一个属性private String name;
    Setter(设置): public void setName(String n){ }
    Getter(取得): public String getName()
class Person{
    private String name ;           // 声明姓名属性
    private int age ;               // 声明年龄属性
    public void setName(String n){  // 设置姓名
        name = n ;
    }
    public void setAge(int a){      // 设置年龄
        age = a ;
    }
    public String getName(){        // 取得姓名
        return name ;
    }
    public int getAge(){            // 取得年龄
        return age ;
    }
    public void tell(){
        System.out.println("姓名:" + name + ",年龄:" + age) ;
    }
};
public class EncDemo03{
    public static void main(String arsgh[]){
        Person per = new Person() ; // 声明并实例化对象
        per.setName("张三") ;     // 调用setter设置姓名
        per.setAge(-30) ;           // 调用setter设置年龄
        per.tell() ;                // 输出信息
    }
};
输出结果:
姓名:张三,年龄:-30

以上的代码只是可以访问封装属性了,但是并没有加入到检测的措施。如果年龄设置的有问题,则不应该为属性赋值。

现在该在settergetter哪个方法中加入检验呢?

  • setter方法中加入验证。
  • getter方法中只是把内容简单的取回即可。
class Person{
    private String name ;           // 声明姓名属性
    private int age ;               // 声明年龄属性
    public void setName(String n){  // 设置姓名
        name = n ;
    }
    public void setAge(int a){      // 设置年龄
        if(a>=0&&a<=150){           // 加入验证
            age = a ;
        }
    }
    public String getName(){        // 取得姓名
        return name ;
    }
    public int getAge(){            // 取得年龄
        return age ;
    }
    public void tell(){
        System.out.println("姓名:" + name + ",年龄:" + age) ;
    }
};
public class EncDemo04{
    public static void main(String arsgh[]){
        Person per = new Person() ; // 声明并实例化对象
        per.setName("张三") ;     // 调用setter设置姓名
        per.setAge(-30) ;           // 调用setter设置年龄
        per.tell() ;                // 输出信息
    }
};
输出结果:
姓名:张三,年龄:0

2、总结

1、封装性的目的
2、settergetter方法的作用
3、封装性在Java中有很多种形式,private只是最基本的一种形式,也是比较常见的形式。
类的每一个属性都必须封装

相关文章

  • 第五章:面向对象基础——封装性 。

    本章目标 掌握封装的产生目的 掌握封装的实现 掌握setter和getter方法的定义 1、具体内容 1.1、为什...

  • 软件测试读书笔记(佟伟光著)8

    面向对象软件测试 面向对象软件的特点及其对测试的影响 面向对象程序三大特征:封装性、继承性、多态性。封装是指将对象...

  • jQuery中面向对象的特征

    面向对象是指面向过程的封装。 面向对象的三大基本特征:封装性,继承性和抽象性 抽象性:需要通过核心数据和特定的环境...

  • Java之面向对象的特征

    面向对象的特征之封装性 举例

  • 【Java面试题】8 面向对象的特征有哪些方面 ?

    面向对象的编程语言有封装、继承 、抽象、多态等4个主要的特征。 封装: 封装是保证软件部件具有优良的模块性的基础,...

  • 面向对象,封装性

    #面向对象的封装性 1.创建一个A类型的对象 A c = new A();。 2.赋值(这里就可以读取了。只是值...

  • 面向对象-封装性

    * 一、面向对象的特征一:封装与隐藏 * 问题:当创建了类的对象以后,如果直接通过"对象.属性"的方式对相应的对象...

  • 面向对象设计基础&原则

    面向对象设计基础 抽象 封装 继承 多态 面向对象设计原则 封装变化 多用组合,少用继承 针对接口编程,不针对实现编程

  • 1.1 封装

    本小节知识: 面向对象三大特性 什么是封装 为什么要进行封装? 封装的好处和原则 1.面向对象三大特性 封装性 继...

  • Kotlin面向对象 (1)✔️类、及属性

    Kotlin语言目前还是以面向对象编程为主,函数式编程为辅。什么是面向对象?面向对象的三大基本特征,封装性、继承性...

网友评论

      本文标题:第五章:面向对象基础——封装性 。

      本文链接:https://www.haomeiwen.com/subject/flxdextx.html