객체 지향은 개발 아이디어 중 가장 중요하게 기억해야 할 점은 모든 것이 객체라는 것입니다. 프로그램을 더 잘 이해하고 작성하기 위해 실제 생활에서 사물을 묘사하는 방법과 아이디어가 통합되어 객체 지향적 사고가 됩니다. 삶의 사물을 프로그램으로 통합하려면 설명이 필요합니다. 설명은 특성과 동작이라는 두 가지 측면으로 나누어집니다. 각 개체 범주의 특성과 동작은 각 유형의 사물을 더 잘 설명하는 방법에 큰 차이가 있습니다. , 그렇다면 프로그래밍 세계에서 추출한 클래스 개념은 삶의 유형 개념과 동일합니다. 그렇다면 인생의 사물을 여러 측면에 따라 분류하면 여러 가지 범주로 분류될 수 있습니다. 프로그래밍의 모든 클래스도 모두가 합리적이라고 말하는 것입니다.
클래스의 구성:
Java의 클래스에는 속성과 메소드가 포함됩니다. 속성은 클래스 내의 변수로 정적 변수, 인스턴스 변수(전역 변수), 지역 변수(메서드에 존재하며 선언 주기는 메서드 호출 단계로 제한됨)로 나눌 수 있습니다.
C#의 클래스에는 다음이 포함됩니다. 필드, 속성 및 메소드. 필드는 Java의 속성에 해당합니다. C#의 속성 개체와 Java의 get 및 set 접근자는 필드의 캡슐화이며 둘 다 동작을 설명합니다.
클래스 멤버 호출:
인스턴스 멤버는 객체에 의해 호출됩니다. 정적 멤버는 클래스에 의해 호출됩니다. 하지만 자바에서는 정적 멤버도 인스턴스에 의해 호출될 수 있는데, 이는 수업에 참여하는 모든 학생이 수업료를 마음대로 통제할 수 있다는 것을 의미하며 이는 매우 나쁜 문제입니다. C#은 이와 관련하여 정적 멤버를 클래스에서만 호출할 수 있도록 엄격히 제한됩니다.
세 가지 주요 기능 - 캡슐화
캡슐화: 내부 구현 세부 정보를 숨기고 데이터 보안 보호 및 코드 재사용 효과를 달성하는 수단입니다.
캡슐은 어디에나 있으며 단순해 보이지만 무한히 확장 가능합니다. 캡슐화에 대한 명시적인 키워드는 없습니다. 아이디어이자 방법이기 때문에 Java와 C# 사이에는 문법적 차이가 없습니다. 캡슐화 효과를 얻기 위해 액세스 수정자를 사용할 때 두 언어의 액세스 수정자가 다릅니다.
Java:
private: 비공개, 내부에서만 액세스 가능
Dufault: 기본값, 동일한 패키지에서 내부적으로 액세스 가능.
보호됨: 동일한 패키지 또는 다른 패키지의 하위 클래스에서 보호되고 액세스 가능합니다.
공개: 공개, 어디에서나 접근 가능.
특징: 명확한 크기 소유권 관계가 있습니다: private < default < protected < public
C#(어셈블리 개념 소개. 네임스페이스는 Java의 패키지와 유사하지만 논리적 그룹화는 다릅니다. Java에서 패키지는 물리적 그룹이고 어셈블리는 프로젝트와 유사합니다.):
private: 비공개, 내부에서만 액세스 가능합니다.
intenal: 내부, 동일한 어셈블리 내에서 액세스 가능, 기본값과 동일.
Protected: protected, 하위 클래스에서 액세스할 수 있으며 이는 Java의 protected와 다릅니다. 여기서 범위는 더 작고 동일한 어셈블리의 하위 클래스가 아닌 경우에는 액세스할 수 없습니다.
보호된 내부: 내부 및 보호된 액세스 범위의 결합입니다.
공개: 공개, 어디에서나 접근 가능.
특징: 명확한 크기 소유권 관계가 없으며 내부 및 보호의 액세스 범위 크기가 불분명합니다.
세 가지 주요 특징 - 상속
상속: 한 클래스가 다른 클래스의 속성과 메서드를 갖도록 하는 것이 목적입니다.
Java: 상속 사용을 나타내기 위해 확장 사용
재작성 요구 사항: a. 메서드 이름, 반환 값 유형 및 매개 변수는 동일해야 합니다. b. 부모 클래스 메서드의 액세스 한정자;
Access 부모 클래스 멤버: super 키워드를 사용하고, super(매개변수)를 사용하여 생성자 메서드에서 호출할 부모 클래스의 생성자 메서드를 지정할 수 있습니다.
C#에서: use: 상속 사용을 나타냅니다.
재작성 요구 사항: a. 메서드 이름, 반환 값 유형, 매개 변수 및 액세스 한정자는 동일합니다. b. 하위 클래스 메서드는 override
에 의해 수정됩니다. 상위 클래스에 성공적으로 액세스합니다. 기본 키워드를 사용하고 생성자 메서드 뒤에 기본(매개변수)을 사용하여 상위 클래스 생성자 메서드를 호출하도록 지정합니다. 기본은 정적 환경에서 사용할 수 없습니다. 상위 클래스의 정적 멤버를 호출할 수 없습니다.
취재 : 새로운 키워드를 사용하세요. C#의 override 내용을 소개합니다. 부모 클래스의 비가상 메서드, 즉 재정의할 수 없는 메서드의 경우 override를 사용하면 부모 클래스의 메서드를 재정의할 수 있습니다. 덮어쓰기에 대한 나의 견해는 재정의하기 위해 메서드를 가상으로 수정해야 한다는 제한으로 인해 발생할 수 있는 문제를 보완하는 것입니다. 그러나 사용할 수 없다면 덮어쓰기는 별 의미가 없습니다. , 또는 덮어쓰기의 실제 역할과 효과를 실제로 인식하지 못했습니다. 사용하는 경우 전문가가 의견을 제시하고 의심을 해소할 수 있습니다.
재작성이 성공했는지 판단하는 기준: 상위 클래스의 참조를 사용하여 하위 클래스의 객체를 가리킵니다. 메서드가 상위 클래스 메서드를 호출하면 하위 클래스 메서드가 호출되면 재작성이 실패합니다. 다시 쓰기에 성공했습니다.
3가지 주요 기능 - 다형성
다형성(Polymorphism): 동일한 행위가 여러 개 존재하는 형태. 그 표현에는 오버로딩과 재작성이 포함됩니다.
오버로딩 요구사항: a. 동일한 클래스에서 b. 매개변수가 동일합니다(매개변수 수, 유형, 순서).
호출 시 전달된 매개변수에 따라 호출할 메서드를 결정합니다.
추상 클래스 및 인터페이스
추상 클래스: 추상으로 수정된 클래스를 추상 클래스라고 합니다.
출처: 내 생각에는 추상 수업의 출처는 깊은 이해를 돕기 위해 신중하게 숙고해 볼 가치가 있다고 생각합니다. 실생활에는 이런 문제가 많이 있습니다. 즉, 이런 종류의 일이 이 작업(방법)을 수행한다는 것을 알고 있지만 어떻게 해야 하는지는 모릅니다. 각 동물이 어떻게 움직이는지 모릅니다. 이때 이 Animal 클래스를 정의할 때 이동 메소드가 필요합니다. 메소드 헤더(무엇을 할지 설명)만 있고 메소드 본문(수행 방법을 설명)은 없습니다. 따라서 이 메소드는 매우 특별하므로 표시합니다. 추상 방법으로 사용하려면 추상 수정을 사용하세요.
그러면 Animal 클래스에 추상 메서드가 있는데, Animal 클래스를 인스턴스화하면 move 메서드를 호출할 때 어떤 문제가 발생할까요? 수행 방법을 설명하지 않기 때문에 알 수 없습니다. 따라서 예를 들어 이러한 알 수 없는 상황을 피하기 위해 Animal 클래스를 추상 클래스로 정의합니다. 주목할만한 특징은 인스턴스화할 수 없다는 것입니다. 인스턴스화할 수 없는 클래스의 경우 비정적 멤버를 호출할 수 없습니다. 그렇다면 이러한 클래스가 존재한다는 의미는 무엇일까요?
그래서 요약: 추상 클래스 존재의 의미는 상속된다는 것입니다. 추상 메서드에는 추상 클래스가 존재하지만 생성자는 있지만 인스턴스화할 수는 없습니다. 문법적으로 Java와 C#은 이 점에서 동일하므로 자세한 내용은 다루지 않겠습니다.
인터페이스: 모든 구현 클래스가 이러한 규칙 및 사양을 충족하도록 공식화된 일련의 규칙 및 사양은 실제 응용 프로그램의 유연성을 크게 높일 수 있습니다. 인터페이스 지향 프로그래밍에 대한 나의 이해는 그다지 깊지 않으며 한두 문장으로 명확하게 설명할 수도 없습니다. 뒤에는 자신의 경험을 올려서 배울 수 있는 전문가들이 있다.
차이점: C#에서는 구현 클래스가 인터페이스의 모든 메서드를 구현하지 않는 경우, 예를 들어 자신을 추상 클래스로 정의하고 구현되지 않은 메서드를 다시 복사하여 추상 메서드로 정의할 수 있습니다.
요약
저는 오랫동안 Java 개발을 해왔습니다. 교육용으로만 C#을 배웠는데 비슷한 점이 있어서 빨리 배울 수 있습니다. 여기서는 구문에만 중점을 두고 프로토콜 작업을 하고 하위 계층에서 작업하는 큰 사람들을 무시합니다.
위 내용은 C#과 JAVA의 객체 지향 구문 차이점 비교의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!