美文网首页
面向对象特征---封装

面向对象特征---封装

作者: 小疏林er | 来源:发表于2020-04-21 12:19 被阅读0次

1、封装

封装是面向对象三大特征之一(继承、封装、多态)。

封装指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问内部信息,而是通过该类提供的方法来实现对内部信息的访问和操作。

封装的具体实现:
  • 将对象的成员变量和实现细节隐藏起来,不允许外部直接访问。
  • 将方法暴露出来,让方法控制对这些成员变量进行安全的访问和操作。
    通俗的说就是该隐藏的隐藏起来(成员变量),该暴露的暴露出来(操作被隐藏的成员变量的方法)

2、封装的作用

  • 隐藏类的实现细节。
  • 使用者只能通过事先定义好的方法来访问数据,从而可以在方法里加入控制逻辑,限制对成员变量的不合理访问和修改。
  • 可进行数据检查,从而有利于保证对象信息的完整性
  • 便于修改,提高代码的可维护性。

举一个栗子:

(1)创建一个Person.class,添加私有成员变量和公有getter、setter方法。

public class Person {
    //使用private修饰成员变量,将他们隐藏起来
    private String name;
    private int age;
    private boolean man;
    
    //自动生成的公有方法来操作成员变量
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public boolean isMan() {
        return man;
    }
    public void setMan(boolean man) {
        this.man = man;
    }
}

(2)对name、age添加合理性校验

public class Person {
    //使用private修饰成员变量,将他们隐藏起来
    private String name;
    private int age;
    private boolean man;
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        //要求用户输入的姓名为2~4位,如果不符合要求打印提示
        if(name.length()>4||name.length()<2) {
            System.out.println("您输入的姓名不符合要求!");
            return; //结束方法
        }else {
            this.name = name;
        }
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        //要求用户输入的年龄在0~120之间
        if(age>120||age<0) {
            System.out.println("您输入的年龄不符合要求!");
            return; //结束方法
        }else {
            this.age = age;
        }
    }
    //boolean类型的get方法叫    is变量名   
    public boolean isMan() {
        return man;
    }
    public void setMan(boolean man) {
        this.man = man;
    }
}

(3)创建一个TestPerson.class,并通过公有方法来调用私有成员变量,并打印出来。

public class TestPerson {
    public static void main(String[] args) {
        Person p = new Person();
//      p.name ="老徐";       由于成员变量都隐藏了,所以不能进行赋值和操作
//      编译不会出错但是,但是会打印"您输入的姓名不符合要求!"
        p.setName("尼古拉斯赵四");
//      编译不会出错但是,但是会打印"您输入的年龄不符合要求!"
        p.setAge(1000);     
        //这次就可以通过公有的方法,将name和age分别赋值为老徐和18。
        p.setAge(18);
        p.setName("老徐");
        //通过公有方法获得姓名、年龄的值,并通过+连接后打印出来。
        System.out.println(p.getName()+"永远"+p.getAge()+"岁!");
    }
}
image.png

3、访问控制符

  • private(当前类访问权限,私有):私有访问修饰符是最严格的访问级别,所以被声明为 private 的方法、变量和构造方法只能被所属类访问,并且类和接口不能声明为 private。
    声明为私有访问类型的变量只能通过类中公共的 getter 方法被外部类访问。
  • default(包访问权限,默认):使用默认访问修饰符声明的变量和方法,对同一个包内的类是可见的。接口里的变量都隐式声明为 public static final,而接口里的方法默认情况下访问权限为 public。
  • protected(子类访问权限,受保护):如果通过protected修饰方法通常是希望其子类来重写该方法。
    (1)、子类与基类在同一包中:被声明为 protected 的变量、方法和构造器能被同一个包中的任何其他类访问;(同一包里其他类都可访问)
    (2)、子类与基类不在同一包中:那么在子类中,子类实例可以访问其从基类继承而来的 protected 方法,而不能访问基类实例的protected方法。(可以被其它包的子类访问)
  • public(公有访问权限,公有):这是一个最宽松的访问控制级别。
    被声明为 public 的类、方法、构造方法和接口能够被任何其他类访问。如果几个相互访问的 public 类分布在不同的包中,则需要导入相应 public 类所在的包。由于类的继承性,类所有的公有方法和变量都能被其子类继承。

image.png
考:
package com.one;
public class People {
  protected String name ="老八"; 
}
//
package com.homework;
import com.one.People;
public class Student extends People{
  public void tet() {
      System.out.println(name);    //通过继承的方式调用
  }
  public static void main(String[] args) {
      Student s = new Student();
//     s.name;     //报错了,通过实例对象不可以调用
  }
}

4、封装的使用细节

(1)类属性一般使用private访问权限。
(2)提供相应公有类型(public修饰)get/set的方法,以提供对属性的赋值与读取操作。

boolean变量的get方法是is开头!例如:

boolean sex=true;
public boolean isSex(){
     return this.sex;
}
(3)一些只用于本类的辅助方法可以用private修饰,希望其他类调用的用public修饰。

5、控制访问和继承

  • 父类中声明为 public 的方法在子类中也必须为 public。
  • 父类中声明为 protected 的方法在子类中要么声明为 protected,要么声明为 public,不能声明为 private。
  • 父类中声明为 private 的方法,不能够被继承。

6、包:类文件的管理

  1. package: 打包
  2. import: 引包

相关文章

  • 面试 | java基础

    面向对象 1、面向对象特征? 封装封装是面向对象的特征之一,是对象和类概念的主要特性。封装,也就是把客观事物封装成...

  • iOS概念知识

    面向对象的三大特征,并作简单的介绍。 面向对象的三个基本特征是:封装、继承、多态。 1.封装是面向对象的特征之一,...

  • Java的封装、继承、多态 包

    目录: 面向对象的三大特征:封装、继承、多态包方法重写superinstanceof 面向对象的三大特征:封装、继...

  • 面向对象的三个基本特征 和 五种设计原则

    一、三个基本特征 面向对象的三个基本特征是:封装、继承、多态。 封装 封装最好理解了。封装是面向对象的特征之一,是...

  • 面向对象的三个基本特征

    面向对象的三个基本特征是:封装、继承、多态。 封装 封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要...

  • 【3】python入门-面向对象-2

    一、面向对象三大特征 面向对象程序设计最主要的有三个特征:封装、继承、多态。 【1】封装。封装,就是将对象敏感的数...

  • java面向对象的三大特征 之 封装

    面向对象的三大特征: 封装 继承 多态 封装

  • java基础知识

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

  • Java进阶 | 从整体上观察面向对象

    一、面向对象 面向对象是Java编程中最核心的思想,基本特征:继承、封装、多态。 1、特征之封装 将结构、数据、操...

  • Java进阶 | 从整体上观察面向对象

    一、面向对象 面向对象是Java编程中最核心的思想,基本特征:继承、封装、多态。 1、特征之封装 将结构、数据、操...

网友评论

      本文标题:面向对象特征---封装

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