01.Java 기초 - 캡슐화
기본 개념
Java 객체 지향에는 캡슐화, 상속, 다형성이라는 세 가지 주요 기능이 있습니다. 캡슐화와 상속은 기본적으로 다형성을 제공합니다.
캡슐화 : 객체의 속성과 동작(또는 서비스)을 독립적인 전체로 결합하고 구현 세부 사항을 객체 내부에 최대한 숨깁니다. 일반인의 관점에서 이는 클래스의 멤버 변수를 사유화하고 이러한 멤버 변수에 액세스할 수 있는 공용 메서드를 제공하는 것을 의미합니다.
데이터 숨기기: 멤버 변수가 private 멤버로 선언되면 외부 클래스를 통해 직접 접근할 수 없으므로 클래스 내부에 멤버 변수가 숨겨집니다. 이러한 이유로 캡슐화를 데이터 은닉이라고도 합니다.
다음과 같은 특징을 가지고 있습니다.
데이터 멤버(객체 멤버)는
private
으로 수정해야 합니다.- 각 객체 멤버에 대해 공개 setter/getter 메서드 제공
setter/getter의 프로토타입은 다음과 같아야 합니다.
-
public void set 成员名(成员类型 arg);public 成员类型 get 成员名();
로그인 후 복사 - 예제 연구
먼저 캡슐화되지 않은 멤버 변수를 살펴보겠습니다. class Person{ // 将成员的访问权限设置为 public,这也为意味这谁都访问到它
public String name; public int age;
}public class Test{
public static void main(String[] args) {
Person person = new Person(); //通过类,我们可以直接操作成员变量
person.name ="kobe";
person.age =1000; //直接获得成员变量的值
System.out.println(person.name+"-"+person.age);
}
}
로그인 후 복사
다음으로 위 클래스를 캡슐화합니다. class Person{ // 将成员的访问权限设置为 public,这也为意味这谁都访问到它 public String name; public int age; }public class Test{ public static void main(String[] args) { Person person = new Person(); //通过类,我们可以直接操作成员变量 person.name ="kobe"; person.age =1000; //直接获得成员变量的值 System.out.println(person.name+"-"+person.age); } }
class Person { //1.将成员变量私有化,这样一来外部就不能直接访问到它们
private String name; private int age; //2.提供公共的方法来操作成员变量
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 class Test {
public static void main(String[] args) {
Person person = new Person(); // 不能直接访问成员变量,而是通过提供的公共方法来设置/获取成员变量的值
person.setName("kobe");
person.setAge(1000);
System.out.println(person.getName() + "-" + person.getAge());
}
}
로그인 후 복사지금까지 캡슐화된 객체와 캡슐화되지 않은 객체의 일반적인 차이점을 살펴보았습니다.
캡슐화되지 않은 객체의 경우 , 멤버 변수에 직접 액세스/설정합니다캡슐화된 객체의 경우 제공된 공용 메소드(예: getters/setters)를 통해 멤버를 조작해야 합니다. 변수class Person { //1.将成员变量私有化,这样一来外部就不能直接访问到它们 private String name; private int age; //2.提供公共的方法来操作成员变量 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 class Test { public static void main(String[] args) { Person person = new Person(); // 不能直接访问成员变量,而是通过提供的公共方法来设置/获取成员变量的值 person.setName("kobe"); person.setAge(1000); System.out.println(person.getName() + "-" + person.getAge()); } }
- 2.
- Encapsulation 제어 객체 이대로라면 Encapsulation은 아무런 효과도 없는 것 같습니다. Encapsulation을 통해 객체를 제어하는 방법을 살펴보겠습니다. :
class Person { private String name; private int age; private int city; //对于 name 的控制,直接取消了 setter 方法,这样外部只能访问,而不能设置 name 的值 public String getName() { // 直接返回值 return "kobe"; } public int getAge() { return age; } // 有两个 setter 方法,可以接收 int,String 类型的参数 public void setAge(int age) { this.age = age; } public void setAge(String age) { // 对参数值进行验证,默认只能输入数字 if(age.matches("[0-9]")){ this.age = Integer.valueOf(age); }else{ System.out.println("Error:年龄只能为数字"); } } // 在日常开发,我们一般会将文字转换成编码在数据库存储,因此在存储调用时就要做转换 public String getCity() { switch (city) { case 001: return "北京"; default: return "上海"; } } public void setCity(String city) { if("北京".equals(city)){ this.city = 001; }else if("上海".equals(city)){ this.city = 002; }else{ System.out.println("Error:没有找到该城市"); } } }public class Test { public static void main(String[] args) { Person person = new Person(); person.setAge("a"); //Error:年龄只能为数字 person.setAge(1000); //既可以接收 String 类型,也可以接收 int 类型 person.setCity("广州"); //Error:没有找到该城市 person.setCity("北京"); //此时已经被转换成 001 存储了 //在访问 city 成员变量时,001 又被转换成 北京 显示 System.out.println(person.getName()+"-"+person.getAge()+"-"+person.getCity()); } }
위의 코드를 통해 캡슐화의 역할을 대략적으로 요약할 수 있습니다.
좋은 캡슐화는 결합을 줄일 수 있습니다. 클래스 내부 구조는 자유롭게 변경할 수 있습니다.
- 을 통해 회원에 대한 보다 정확한 통제가 가능합니다.
- 정보를 숨기고 세부정보를 구현합니다.
- 참고자료
http://www.php.cn/java-article -351262.html

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Java의 난수 생성기 안내. 여기서는 예제를 통해 Java의 함수와 예제를 통해 두 가지 다른 생성기에 대해 설명합니다.

Java의 Weka 가이드. 여기에서는 소개, weka java 사용 방법, 플랫폼 유형 및 장점을 예제와 함께 설명합니다.

Java의 Smith Number 가이드. 여기서는 정의, Java에서 스미스 번호를 확인하는 방법에 대해 논의합니다. 코드 구현의 예.

이 기사에서는 가장 많이 묻는 Java Spring 면접 질문과 자세한 답변을 보관했습니다. 그래야 면접에 합격할 수 있습니다.

Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다

Java의 TimeStamp to Date 안내. 여기서는 소개와 예제와 함께 Java에서 타임스탬프를 날짜로 변환하는 방법에 대해서도 설명합니다.
