java 面向对象-封装

Posted boyw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 面向对象-封装相关的知识,希望对你有一定的参考价值。

封装

面向对象三大特性:

  封装:为了解决程序数据的安全性

  继承:为了解决程序代码的重复性

  多态:为了解决程序代码的扩展性

什么是封装:

封装:将类中某些成员隐藏起来,对外暴露一个公共的访问方式

为什么要封装

通过下面 一个例子来说明下为什么要使用封装

 

public class Dog {
    int age;
    String name;

    public void bark(){
        System.out.println("狗嗷嗷叫....");
    }
}

public class TestDog {
    public static void main(String[] args) {
        //1.创建一个狗对象
        Dog d1 = new Dog();
        System.out.println(d1.name); // null
        System.out.println(d1.age); // 0
        //2.修改成员变量的值
        d1.name = "旺财";
        d1.age = -18;//非法数据
        System.out.println(d1.name); // 旺财
        System.out.println(d1.age); // 18
    }
}

如果我们给 age 赋值非法数据,也能通过编译,也能运行,但是数据很明显不符合实际,我们可以使用封装,解决这种数据安全问题

封装的原则和步骤

原则:合理隐藏,合理暴露

步骤:

  1. 隐藏成员变量
  2. 提供一种访问的方式

如何使用封装

private关键字的介绍

private 可以用来修饰类的成员变量/成员方法

作用:

  如果成员变量被private修饰了,那么该成员变量只能类的内部访问,外部无法访问

接着:

  我们还需要暴露一种访问该成员变量的方式,称为获取器和设置器(getter And setter)

代码演示:

 

public class Dog {
    //private的作用 私有化成员变量
    private int age;
    private String name;

    public void bark(){
        System.out.println("狗嗷嗷叫....");
    }
    //为name提供get/set方法
    public String getName(){
        return name;
    }
    public void setName(String n){
        name = n;
    }
    //我们要为age提供get/set方法
    //get方法
    public int getAge() {
        return age;
    }
    //set方法
    public void setAge(int a){
        //对数据的合法性进行判断
        if (a>0 && a<20){
            age = a;
        }else{
            age = 10;//如果a的值不符合正常范围,我们认为是10
        }
    }
}


public class TestDog {
    public static void main(String[] args) {
        //1.创建一个狗对象
        Dog d1 = new Dog();
//        System.out.println(d1.name); // null
        System.out.println(d1.getName()); // null
//        System.out.println(d1.age); // 0
        System.out.println(d1.getAge()); // 0
        //2.修改成员变量的值
//        d1.name = "旺财";
        d1.setName("旺财");
//        d1.age = -18;//非法数据
        d1.setAge(-1800);
        System.out.println(d1.getName()); // 旺财
        System.out.println(d1.getAge()); // 18
    }
}

 

以上是关于java 面向对象-封装的主要内容,如果未能解决你的问题,请参考以下文章

Java 封装

Java 封装

Java 封装

Java 封装

Java 封装

Java封装