>  기사  >  Java  >  Java에서 캡슐화를 구현하기 위해 액세스 한정자와 패키지를 사용하는 방법은 무엇입니까?

Java에서 캡슐화를 구현하기 위해 액세스 한정자와 패키지를 사용하는 방법은 무엇입니까?

王林
王林앞으로
2023-04-23 12:52:151104검색

    1. 캡슐화

    캡슐화는 객체 지향 프로그램의 세 가지 주요 특징 중 하나입니다. 객체 지향 프로그램의 세 가지 주요 특징은 캡슐화, 상속 및 다형성입니다.

    캡슐화: 데이터와 데이터 조작 방법을 유기적으로 결합하고, 객체의 속성과 구현 세부 사항을 숨기고, 객체와 상호 작용할 수 있는 인터페이스만 노출합니다(간단히 말하면 세부 사항을 보호하는 쉘입니다).

    컴퓨터와 같은 실제 사물을 사용하여 포장을 이해합니다.

    컴퓨터와 같은 복잡한 장치의 경우 사용자에게 제공되는 것은 전원 켜기 및 끄기, 키보드를 통한 입력, 모니터, USB 잭, 등을 통해 사용자는 컴퓨터와 상호 작용하여 일상적인 작업을 완료할 수 있습니다.

    그러나 사실 컴퓨터의 실제 작업은 CPU, 그래픽 카드, 메모리 및 기타 하드웨어 구성 요소입니다. 컴퓨터 사용자의 경우 마더보드의 회로 배치, CPU 설계 등 내부 핵심 구성 요소에 대해 걱정할 필요가 없습니다. 사용자는 컴퓨터를 켜는 방법과 작동하는 방법만 알면 됩니다. 키보드와 마우스를 통해 컴퓨터와 상호 작용합니다. 따라서컴퓨터 제조업체는 공장을 떠날 때 내부 구현 세부 사항을 숨기기 위해 외부에 쉘을 배치하고 사용자가 컴퓨터와 상호 작용할 수 있도록 전원 스위치, 마우스 및 키보드 잭만 외부에 제공합니다.

    2. 액세스 한정자(수정자)

    캡슐화는 주로 Java의 클래스와 액세스 권한을 통해 이루어집니다. 클래스는 데이터와 데이터 캡슐화 방법을 결합할 수 있으며, 이는 사물에 대한 인간의 이해에 더 부합하며 액세스 권한 클래스, 클래스의 메서드 또는 필드를 클래스 외부에서 직접 사용할 수 있는지 여부를 제어하는 ​​데 사용됩니다. Java에서 제공하는 접근 한정자는 4가지가 있습니다.

    Java에서 캡슐화를 구현하기 위해 액세스 한정자와 패키지를 사용하는 방법은 무엇입니까?

    public: 공개, 사람의 외모 특성으로 이해될 수 있으며 누구나 볼 수 있습니다.

    protected: 보호됨, 상속에 대한 지식 포함, 상속 블로그에 자세한 소개

    default: 아무것도 쓰지 않을 때의 기본 권한은 가족(동일 패키지)에게 비밀이 아니며 다른 사람에게만 공개됩니다.

    private: 비공개, 본인만 알고 다른 사람은 알 수 없습니다.

    다음을 통한 캡슐화 이해 아래에 주어진 코드 예제:

    class Person {
        private String name;
        //private修饰的成员变量只能在本类中访问
        private int age;
    
        String sex;
        //这里不加修饰符即为默认权限,默认是default权限
    
        public String getName() {
            return name;
        }
        //在其他类中不能直接访问name和age,
        //但可以在本类中提供公开的(public修饰)访问方法和外界进行交互
        //这里就是对成员变量进行了封装
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public void show() {
            System.out.println("姓名:"+name+" 年龄: "+age);
        }
    }
    
    public class Test {
    
        public static void main(String[] args) {
            Person person = new Person();
            //person.name = "bit";//不能直接进行访问
            person.setName("XIN-XIANG荣");
            person.setAge(21);
            //通过提供Person类中提供的方法间接进行访问
            System.out.println(person.getName()+" => "+person.getAge());
        }
    }

    일반적으로 멤버 변수는 비공개로 설정되고 멤버 메서드는 공개로 설정됩니다. 이 예제를 통해 캡슐화를 더 잘 이해할 수 있습니다. 여기에서는 클래스 내부의 구현 세부 사항이 숨겨지거나 캡슐화되며 일부만 표시됩니다. 다른 사용자가 액세스할 수 있도록 공개 메소드가 제공됩니다.

    [액세스 한정자 시나리오 사용]:

    • 클래스가 가능한 한 "캡슐화"되어야 합니다. 즉, 내부 구현 세부 정보를 숨기고 클래스 호출자에게 필요한 정보만 노출해야 합니다.

    • 따라서 사용할 때는 더 엄격한 액세스 권한을 사용하도록 최선을 다해야 합니다. 예를 들어 비공개로 사용할 수 있는 메소드는 공개로 사용하지 마세요.

    • 또한 다음과 같은 간단한 방법이 있습니다. 조잡한 방법: 모든 필드를 비공개로 설정하고 모든 메소드를 공개로 설정합니다. 그러나 이 방법은 액세스 권한을 남용하는 것이지만 코드를 작성할 때 클래스에서 제공하는 필드 메소드를 "누구"가 사용하는지 생각하는 것이 가장 좋습니다( 클래스 내부용입니다. 클래스 호출자 또는 하위 클래스에서 사용됩니다.)

    3. 패키지

    1. 패키지의 개념

    객체 지향 시스템에서는 즉,

    더 나은 클래스 관리를 위해 여러 클래스를 소프트웨어 패키지라는 그룹으로 함께 모았습니다. 디렉토리와 다소 유사합니다. 예: 컴퓨터에서 사진을 더 잘 관리하려면 동일한 속성을 가진 사진을 동일한 파일에 넣거나 특정 폴더에 있는 사진을 더 자세히 분류하는 것이 좋습니다.

    Java에서 캡슐화를 구현하기 위해 액세스 한정자와 패키지를 사용하는 방법은 무엇입니까?

    패키지는 Java에도 도입되었습니다.

    패키지는 클래스, 인터페이스 등의 캡슐화 메커니즘을 구현한 것이며 클래스나 인터페이스 등을 구성하는 좋은 방법입니다. 패키지 다른 패키지의 클래스에서 사용하고 싶지 않습니다. 패키지도 중요한 역할을 합니다. 동일한 이름을 가진 클래스는 서로 다른 패키지에 있는 한 동일한 프로젝트에 존재할 수 있습니다. 2. 패키지에서 클래스 가져오기

    2.1 가져오기 방법 1

    Java는 우리가 사용할 수 있도록 이미 만들어진 여러 클래스를 제공합니다. 예를 들어 Date 클래스: java.util.Date를 사용할 수 있습니다. > import java .util은 이 패키지의 Date 클래스입니다.
    public class Test1 {
        public static void main(String[] args) {
            java.util.Date date = new java.util.Date();
            // 得到一个毫秒级别的时间戳
            System.out.println(date.getTime());
        }
    }

    2.2 가져오기 방법 2 java.util.Date 导入 java.util 这个包中的 Date类.

    import java.util.Date;
    public class Test1 {
        public static void main(String[] args) {
            Date date = new Date();
            // 得到一个毫秒级别的时间戳
            System.out.println(date.getTime());
        }
    }
    2.2 导入方法二

    但是这种写法比较麻烦一些, 可以使用 import语句导入包

    import java.util.*;
    public class Test1 {
        public static void main(String[] args) {
            Date date = new Date();
            // 得到一个毫秒级别的时间戳
            System.out.println(date.getTime());
        }
    }
    2.3 导入方法三

    如果需要使用 java.util 中的其他类, 可以使用 import java.util.*

    하지만 이 작성 방법이 더 번거롭습니다.

    import 문을 사용하여 패키지를 가져올 수 있습니다

    import java.util.*;
    import java.sql.*;
    public class Test1 {
        public static void main(String[] args) {
    // util 和 sql 中都存在一个 Date 这样的类, 此时就会出现歧义, 编译出错
            Date date = new Date();
            System.out.println(date.getTime());
        }
    }
    
    // 编译出错
    //Error:(5, 9) java: 对Date的引用不明确
    //java.sql 中的类 java.sql.Date 和 java.util 中的类 java.util.Date 都匹配
    2.3 가져오기 방법 three

    java.util을 사용해야 하는 경우 다른 클래스의 경우 import java.util.*를 사용할 수 있습니다. 여기서 java.util 패키지의 모든 클래스를 가져올 수 있지만 주의하세요. 모든 클래스를 한 번에 가져옵니다. 도착하는 사람을 가져옵니다. 🎜
    import java.util.*;
    import java.sql.*;
    public class Test1 {
        public static void main(String[] args) {
            java.util.Date date = new java.util.Date();
            System.out.println(date.getTime());
        }
    }
    🎜하지만 🎜가져올 클래스 이름을 명시적으로 지정하는 것이 더 좋습니다🎜. 그렇지 않으면 충돌🎜이 쉽게 발생할 수 있습니다.🎜
    import java.util.*;
    import java.sql.*;
    public class Test1 {
        public static void main(String[] args) {
    // util 和 sql 中都存在一个 Date 这样的类, 此时就会出现歧义, 编译出错
            Date date = new Date();
            System.out.println(date.getTime());
        }
    }
    
    // 编译出错
    //Error:(5, 9) java: 对Date的引用不明确
    //java.sql 中的类 java.sql.Date 和 java.util 中的类 java.util.Date 都匹配

    在这种情况下需要使用完整的类名

    import java.util.*;
    import java.sql.*;
    public class Test1 {
        public static void main(String[] args) {
            java.util.Date date = new java.util.Date();
            System.out.println(date.getTime());
        }
    }
    2.4 导入静态的方法和字段
    import static java.lang.Math.*;
    public class Test {
        public static void main(String[] args) {
            double x = 30;
            double y = 40;
    // 静态导入的方式写起来更方便一些.
    // double result = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
            double result = sqrt(pow(x, 2) + pow(y, 2));
            System.out.println(result);
        }
    }
    
    //对比正常的导入和使用
    import java.lang.Math;
    public class Test1 {
        public static void main(String[] args) {
            double x = 30;
            double y = 40;
            double result = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
            System.out.println(result);
        }
    }

    3. 自定义包

    3.1 基本使用规则:
    • 在文件的最上方加上一个 package 语句指定该代码在哪个包中.

    • 包名需要尽量指定成唯一的名字, 通常会用公司域名的颠倒形式(例如com.bat.demo1 ).

    • 包名要和代码路径相匹配. 例如创建 com.bat.demo1 的包, 那么会存在一个对应的路径 com/bat/demo1 来存储代码

    • 如果一个类没有 package 语句, 则该类被放到一个默认包中

    3.2 IDEA中创键自定义包

    在 IDEA 中先新建一个包: 右键 src -> 新建 -> 包

    Java에서 캡슐화를 구현하기 위해 액세스 한정자와 패키지를 사용하는 방법은 무엇입니까?

    在弹出的对话框中输入包名, 例如 com.bat.demo1 ,敲入回车即可

    Java에서 캡슐화를 구현하기 위해 액세스 한정자와 패키지를 사용하는 방법은 무엇입니까?

    在包中创建类, 右键包名 -> 新建 -> 类, 然后输入类名回车即可.

    Java에서 캡슐화를 구현하기 위해 액세스 한정자와 패키지를 사용하는 방법은 무엇입니까?

    此时可以看到我们的磁盘上的目录结构已经被 IDEA 自动创建出来了

    Java에서 캡슐화를 구현하기 위해 액세스 한정자와 패키지를 사용하는 방법은 무엇입니까?

    同时我们也看到了, 在新创建的 Test.java 文件的最上方, 就出现了一个 package 语句

    Java에서 캡슐화를 구현하기 위해 액세스 한정자와 패키지를 사용하는 방법은 무엇입니까?

    4. 不同包中的访问权限控制

    Computer类位于com.bat.demo1包中,TestComputer位置com.bat.demo2包中

    package com.bat.demo1;
    
    public class Computer {
        private String cpu; // cpu
        private String memory; // 内存
        public String screen; // 屏幕
        String brand; // 品牌
    
        public Computer(String brand, String cpu, String memory, String screen) {
            this.brand = brand;
            this.cpu = cpu;
            this.memory = memory;
            this.screen = screen;
        }
    
        public void Boot() {
            System.out.println("开机~~~");
        }
    
        public void PowerOff() {
            System.out.println("关机~~~");
        }
    
        public void SurfInternet() {
            System.out.println("上网~~~");
        }
    }

    Java에서 캡슐화를 구현하기 위해 액세스 한정자와 패키지를 사용하는 방법은 무엇입니까?

    注意:如果去掉Computer类之前的public修饰符,Computer类为默认权限,只能在同一包中访问,代码也会编译失败

    5. 常见的包

    • java.lang:系统常用基础类(String、Object),此包从JDK1.1后自动导入。

    • java.lang.reflect:java 反射编程包;

    • java.net:进行网络编程开发包。

    • java.sql:进行数据库开发的支持包。

    • java.util:是java提供的工具程序包;(集合类等) 非常重要

    • java.io:I/O编程开发包。

    위 내용은 Java에서 캡슐화를 구현하기 위해 액세스 한정자와 패키지를 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제