>  기사  >  Java  >  java - 객체 지향에 대한 자세한 소개(1)

java - 객체 지향에 대한 자세한 소개(1)

王林
王林앞으로
2019-08-22 17:16:272968검색

1. 객체지향이란 무엇인가요?

객체 지향(OO)은 일반적인 프로그램 구조 설계 방법입니다.
객체지향적 사고의 기본은 관련 데이터와 메소드를 함께 새로운 복합 데이터 유형으로 만든 후, 새로 생성된 복합 데이터 유형을 프로젝트의 기반으로 사용하는 것입니다.

객체 지향은 프로세스 지향에 비해 매우 추상적인 개념입니다.

프로세스와 객체는 모두 문제 해결을 위한 아이디어입니다.

프로세스 지향: 기능적 동작, 프로세스, 먼저 수행할 작업, 다음에 수행할 작업 강조

객체 지향: 기능을 객체로 캡슐화하고 객체에 특정 기능을 강조함

객체 지향에 따르면, 무엇이든 물건으로!

객체 지향의 세 가지 특성:

캡슐화,

상속,

다형성.

내 요약:

프로세스 지향: 특정 기능의 구현을 강조합니다. (실행자)

객체 지향: 기능이 있는 객체를 강조합니다. (관리자)

2. 클래스

클래스는 Java 언어의 가장 작은 프로그래밍 단위이며 Java 프로그램을 설계하고 구현하는 기초입니다. 이 섹션에서는 클래스에 대한 관련 지식을 심층적으로 소개합니다.
클래스의 개념
클래스는 사물 그룹의 공통적인 특성과 기능에 대한 설명입니다. 클래스는 객체지향 기술에 따라 설계할 때 가장 작은 단위이자, 프로젝트를 구성하는 가장 기본적인 모듈이다. 클래스의 개념은 건축설계의 도면과 마찬가지로 추상적이며, 현실에서 표현해야 하는 구체적인 내용을 추상화한 것이다. 클래스에는 특정 데이터가 아닌 프레임워크 구조만 포함됩니다. 따라서 계급은 특정 개인이 아닌 전체를 대표한다.

내 요약: 클래스는 추상적이고 객체는 구체적이고 현실적입니다!

클래스 정의:

[수정자] 클래스 클래스 이름 {

1~n 구성 방법;

0~n 필드;

0~n 방법

}

클래스를 정의합니다. 실제로는 객체입니다. 정의된 클래스

객체에는 다음이 포함됩니다.

함수, 동작(메서드)

상태--------멤버 변수; 동작 - 메소드;

Eg

:

class Person{
//属性
   private String name;
   private int age;
   private int sal;
   //方法
   public void show(){
      System.out.println("个人情况:"+name+age+sal);
   }
}

3. 생성자 메소드

생성자 메소드: 클래스의 인스턴스를 구성하는 데 사용됩니다(각 클래스에는 기본적으로 매개변수가 없는 생성자가 있으므로 새 호출을 사용해야 함)

Field: 클래스나 객체에 포함된 데이터, 클래스 상태에 대한 설명 방법: 클래스나 객체의 특성이나 동작

기능:

클래스에서 사용할 수 있는 필드를 초기화합니다. 객체를 만듭니다.

특징:

메서드 이름은 클래스 이름과 동일합니다.

반환 값 유형을 정의할 필요가 없습니다.

반환 문을 작성할 필요가 없습니다.

참고

:

기본 생성자의 특성.

오버로딩 형태로 여러 생성자가 존재합니다. 생성자 메서드 오버로딩: (필요한 것을 적용하고 필요한 것을 호출합니다.)

this([실제 매개변수]) 현재 클래스의 생성자 메서드 호출

Note

: this([실제 매개변수] ); 반드시 생성자의 첫 줄에 위치해야 합니다;

객체 생성 형식

:클래스 이름 객체 이름 = 새 클래스 이름();

()이 있으므로 실제로는 메서드입니다. , 이는 생성 방법이며 비공개 생성자입니다. 예:

CellPhone cp = new CellPhone();
Eg:
 
class Person{
 
   private String name;
 
   private int age;
 
   private int sal;
 
   public void show(){
 
      System.out.println("个人情况:"+name+age+sal);
 
   }
 
 
 
   public Person(String name) {
 
      super();
 
      this.name = name;
 
   }
 
 
 
   public Person(String name, int age) {
 
      super();
 
      this.name = name;
 
      this.age = age;
 
   }
 
 
 
   public Person(String name, int age, int sal) {
 
      super();
 
      this.name = name;
 
      this.age = age;
 
      this.sal = sal;
 
   }
 
}

4. 정적 키워드

기능:

클래스가 로드될 때 로드됨

객체 존재 우선순위# 🎜 🎜#

모든 객체에 공유됨

클래스 이름으로 직접 호출 가능

사용 참고 사항:# 🎜🎜#정적 메서드는 정적 멤버에만 액세스할 수 있습니다

그러나 비정적 멤버 메서드는 정적 멤버에 액세스할 수 있습니다.

정적에서는 사용할 수 없습니다. method this, super 키워드

메인 메소드(main)는 정적입니다(클래스 이름을 사용하여 정적 메인 메소드를 호출할 수 있습니다. 이는 정상입니다! 하지만 무한 루프에 빠져 메모리 문제가 발생함). 오버플로되면 jvm이 자동으로 중지됩니다! )

public static void main(String[] agrs){}


수정 가능한 필드 및 방법.

정적으로 수정된 멤버는 클래스의 단일 인스턴스가 아니라 이 클래스에 속한다는 의미입니다. #🎜🎜 ## s#Static 수정 필드 == 클래스 필드#🎜🎜 ## 🎜🎜#Static 수정 메소드 == 클래스 메소드 ## 🎜🎜#没클래스에 속하지 않는 클래스의 단일 인스턴스입니다.

                                                               ‐ ‐                                          ’ s ’ s ’ s ’ t         ’ ’ ― 함께  정적으로 수정됨 == 인스턴스 메서드

                                   🎜🎜# #🎜🎜 #클래스와 인스턴스의 필드와 메서드에 액세스하기 위한 구문:

클래스 멤버 액세스: Class.field Class.method

인스턴스 멤버 액세스: Instance.field Instance.method # 🎜🎜#

내 요약

:

정적으로 수정된 필드 및 메서드는 클래스나 인스턴스를 통해 호출할 수 있습니다. #🎜🎜 #

Fields 및 정적 수정이 없는 메소드는 인스턴스를 통해서만 호출할 수 있습니다(사용하는 것이 좋습니다: 호출할 클래스 이름; 실제로 최하위 수준에서 객체가 클래스 멤버를 호출하면 클래스 이름 호출도 변환됩니다)
#🎜 🎜#static 키워드는 this 및 super와 동시에 사용할 수 없습니다!

5. 익명 개체

이름이 없는 개체는 개체를 생성합니다. , 변수에 할당되지 않음;

Features:

메서드 또는 필드에 대해 한 번만 호출되는 경우# 🎜 🎜#

은 실제 매개변수로 전달될 수 있습니다.


은 힙의 저장 영역만 엽니다.

은 한 번만 사용할 수 있습니다. , 폐기 후 사용됩니다.

언제 사용하나요? 한 번만 사용하세요! !

new Person()은 익명 개체, 이름이 없는 개체를 나타냅니다.

new Person().age = 17;//使用一次之后就被销毁了

6、this关键字

特点:this表示当前对象。

当前对象  ←→  当前正在调用实例成员的对象

换言之:谁调用了方法,谁就是当前对象。

什么时候使用this关键字呢?

方法间的相互调用;

this.字段;

构造器中相互调用,但是此时this([参数])必须写在构造方法第一行。

this不能用在static修饰的方法里和static修饰的代码块里;

Eg:构造方法中的this.name = name;

7、面向对象之封装

封装的两个含义:

1.把对象的状态和行为看成一个统一的整体,将二者存放在一个独立的模块中(类);

2."信息隐藏", 把不需要让外界知道的信息隐藏起来,尽可能隐藏对象功能实现细节,字段;

封装机制在程序中的体现是:

把描述对象的状态用字段表示,描述对象的行为用方法表示,把字段和方法定义在一个类中,并保证外界不能任意更改其内部的字段值,也不允许任意调动其内部的功能方法。

程序中的一种体现:

通常将类中的成员变量私有化(private),通过对外提供方法(setXxx,getXxx),可对该变量(xxx)进行访问。

boolean 类型的变量没有getXX,只有 isXX;

 
Eg:
 
class Person1{
 
   private String name;
 
   private int age;
 
   private int sal;
 
  
 
   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;
 
   }
 
}

8、访问修饰符

private 类访问权限:本类内部可以访问,不能继承到子类;

default 什么都不写,包访问权限:本类内部可以访问,同包其他类也可以访问,同包可继承;

protected 子类访问权限:本类内部可以访问,不同包的子类也可以访问,同包其他类也可以访问,能继承到子类;

public 公共访问权限:任何地方都可以访问,能继承到子类;

总结:

java - 객체 지향에 대한 자세한 소개(1)

9. 수업 설계 분석

분석 아이디어: # 🎜 🎜#

클래스에 포함된 필드를 필요에 따라 작성합니다.

모든 필드는 비공개되어야 합니다.

캡슐화된 필드는 setter 및 getter를 통해 전달될 수 있습니다. and get;

필요에 따라 여러 구성 메소드를 추가할 수 있습니다.

필요에 따라 해당 메소드를 추가할 수 있습니다.

Don 클래스의 모든 메소드; 직접 처리(출력 및 인쇄)하지 않고 호출자에게 맡깁니다. 10. 객체지향 상속 기본적으로 특별한 것을 반영하는 클래스

즉, 상속은 일반에서 특수까지의 관계입니다. 🎜##🎜 🎜#

Features: 1. 개선되었습니다.

2. 클래스 간 관계가 있어야만 다형성의 특성을 가질 수 있습니다.

3. Java 언어는 단일 상속만 지원합니다(C 언어와 다름).

다중 상속은 쉽게 보안 위험을 가져올 수 있기 때문입니다(부모 클래스가 너무 많고 함수가 동일하면 호출에 불확실성이 있습니까? 메서드를 덮어쓰는가, 누가 재정의하는가?).

ps: 인터페이스는 다중 상속을 달성할 수 있습니다

4. Java는 다중 계층 상속을 지원하며 객체는 각 클래스의 슈퍼 클래스입니다. 구현 트리 모양 구조.

내 요약:

상속은 다형성의 전제 조건입니다.

클래스의 경우 단일 상속만 지원됩니다.

형식:

[수정자] class SubClass는 SuperClass를 확장합니다

# 🎜🎜#이 관계에 따르면 SuperClass 클래스를 상위 클래스 또는 기본 클래스라고 부르고 SubClass를 하위 클래스 또는 파생 클래스 또는 확장 클래스라고 부릅니다.

내 요약: # 🎜🎜#

java.lang.Object는 모든 클래스의 상위 클래스입니다.

Object는 직접 상위 클래스이거나 간접 상위 클래스입니다.

예:

학생들은 인간의 특수한 상황에 속합니다. 이때 Person 클래스에는 사람들의 공통된 특성을 작성합니다. 이러한 공통 특성(교사와 같은 다른 사람들도 이러한 공통점을 가질 수 있음)을 선택한 다음 학생들에게 개인 범주를 확장하도록 요청합니다.

내 요약:

하위 클래스와 상위 클래스 간의 관계:
하위 클래스는 상위 클래스를 확장합니다(하위 클래스는 상위 클래스 특수 상황)

주로 상위 클래스를 기반으로 한 다음 자신만의 필드와 메서드를 추가합니다.

부모 클래스의 비공개 멤버는 하위 클래스에서 상속될 수 없습니다.

부모 클래스의 생성 방법은 상속될 수 없습니다.

Java만 가능합니다. 단일 상속을 지원합니다. 다중 상속은 지원되지 않습니다. // 그렇지 않으면 예를 들어 show 메서드가 여러 메서드를 상속하는 경우 어떤 메서드를 호출해야 할지 모르겠습니다.

클래스에는 단 하나의 직계 부모 클래스가 있습니다.

클래스가 명시적인 표현 없이 다른 클래스를 상속하는 경우 기본 직계 부모 클래스는 Object 클래스입니다.#🎜 🎜 #

Student의 직계 부모 클래스는 Person이고, Object 클래스도 Student 클래스의 부모 클래스이지만 간접 부모 클래스입니다.

클래스가 명시적으로 다른 클래스를 상속받은 경우 , 이때 기본 직접 상위 클래스 Object는 취소됩니다.

Java의 클래스는 하나의 직접 상위 클래스만 가질 수 있습니다.

java.lang.Object는 모든 클래스의 상위 클래스이며, Object는 직접 상위 클래스이거나 간접 상위 클래스입니다.

하위 클래스 객체 인스턴스화 프로세스

상속 작업에서 하위 클래스 객체의 인스턴스화를 위해:

인스턴스화 전에 하위 클래스 객체는 먼저 상위 클래스의 생성자를 호출한 다음 자체 생성자를 호출해야 합니다.

위 내용은 앞으로도 여러분을 위해 객체지향 지식을 정리하는 글의 내용 중 일부입니다. 잘못된 점 지적 부탁드립니다. 감사합니다!

관련 질문이 더 필요하시면 PHP 중국어 웹사이트를 방문하세요: JAVA 비디오 튜토리얼

위 내용은 java - 객체 지향에 대한 자세한 소개(1)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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