Java Object-Oriented : 여기서 우리는 모든 사람이 배우고 이해하도록 돕기 위해 객체 지향의 기본 지식을 구성합니다. 모든 사람을 도울 수 있기를 바랍니다. 회사 인터뷰 정보를 기반으로 편집 한 관련 지식은 다음과 같습니다.
과부하와 재정의 차이. 오버로드 된 메소드가 반환 값의 유형을 변경할 수 있습니까?
오버로드는 과부하를 의미하며, 재정의는 과다 쓰기를 의미합니다. 오버로드 오버로드는 동일한 클래스에 동일한 이름을 가진 여러 메소드가있을 수 있지만 이러한 메소드의 매개 변수 목록은 다릅니다 (즉, 매개 변수의 숫자 또는 유형이 다릅니다).
재발급 재발행은 서브 클래스의 메소드가 부모 클래스의 메소드의 이름 및 매개 변수와 정확히 동일 할 수 있음을 의미합니다. 이 메소드가 서브 클래스에 의해 생성 된 인스턴스 객체를 통해 호출되면 서브 클래스의 정의 메소드가 호출되며, 이는 부모 클래스에 정의 된 동일한 방법을 덮어 쓰는 것과 같습니다. 이것은 또한 객체 지향 프로그래밍의 다형성을 나타내는 것입니다.
재정의는 재정의로 번역 될 수 있습니다. 문자 그대로 알 수 있듯이 다른 기능을 달성하기 위해 방법을 무시하고 다시 작성하고 있습니다. 우리에게 가장 친숙한 재정의는 인터페이스 방법을 구현하는 것입니다. 인터페이스에서는 방법이 일반적으로 선언되며,이를 구현할 때 모든 인터페이스 선언 방법을 구현해야합니다. 이 일반적인 사용법 외에도 상속의 상위 클래스의 방법을 무시할 수도 있습니다. 다음 사항은 적용 중에주의를 기울여야합니다.
1. 오버레이 방법의 로고는 오버레이의 효과를 달성하기 위해 오버레이 방법의 로고와 정확히 일치해야합니다.
2. 덮어 쓰기 메소드의 반환 값은 덮어 쓰기 된 메소드의 반환과 일치해야합니다.
3. 덮어 쓰기 된 방법에 의해 던져진 예외는 덮어 쓰기 된 방법에 의해 제외 된 예외와 일치해야한다.
4. 덮어 쓰기 메소드는 비공개 일 수 없으며, 그렇지 않으면 새 메소드 만 서브 클래스에 정의되며 덮어 쓰지 않습니다.
오버로드는 오버로드로 변환 될 수 있습니다. 이는 동일한 이름의 일부 메소드를 정의하여 다른 입력 매개 변수를 정의하여 이러한 메소드를 구별 한 다음 VM은 다른 매개 변수 스타일에 따라 실행할 적절한 메소드를 선택합니다. 과부하를 사용하는 경우 다음 사항에주의하십시오.
1. 과부하를 사용하는 경우 다른 매개 변수 스타일 만 전달할 수 있습니다. 예를 들어, 서로 다른 매개 변수 유형, 다른 매개 변수 수 및 다른 매개 변수 주문 (물론 동일한 방법의 여러 매개 변수 유형이 다르아야합니다. 예를 들어, 재미있을 수 있지만 재미있을 수 있지만 재미는 없습니다 (int, int).
2. 액세스 권한, 반환 유형 및 예외를 통해 과부하 할 수 없습니다.
3. 예외 유형과 메소드 수는 과부하에 영향을 미치지 않습니다.
4. 상속의 경우, 메소드가 상위 클래스에서 액세스 권한이 있고 priavte 인 경우 서브 클래스에 과부하 할 수 없습니다. 정의 된 경우 새 방법 만 정의하고 과부하의 효과를 달성하지 못합니다.
여러 오버로드 된 메소드의 매개 변수 목록이 다른 경우 리턴 터 유형이 다를 수 있습니다. 두 메소드의 매개 변수 목록이 정확히 동일하면 다른 리턴 값으로 과부하 오버로드를 달성 할 수 없습니다. 이 문제를 설명하기 위해 리버스 교전 방법을 사용할 수 있습니다. 예를 들어, Map.Remove (키) 메서드를 호출 할 때 제거 메소드는 리턴 값을 가지고 있지만 일반적으로 반환 결과를 수신하는 변수를 정의하지 않습니다. 현재이 클래스에 정확히 동일한 이름과 매개 변수 목록이있는 두 가지 메소드가 있다고 가정하면, 반환 유형이 다르기 때문에 Java는 결과 유형을 반환하여 판단 할 수 없기 때문에 프로그래머가 호출하려는 메소드를 결정할 수 없습니다.
생성자를 재정의 할 수 있습니까?
생성자 생성자를 상속받을 수 없으므로 재정의를 재정의 할 수 없지만 과부하를 과부하 할 수 있습니다.
인터페이스를 상속받을 수 있습니까? 추상 클래스가 인터페이스를 구현할 수 있습니까? 초록 클래스가 콘크리트 클래스를 상속받을 수 있습니까? 추상 클래스가 존재할 수 있습니까? 초록 클래스가 추상 클래스에서 정적 메인 메소드를 가질 수 있습니까?
인터페이스는 인터페이스를 상속 할 수 있습니다. 초록 클래스는 인터페이스를 구현할 수 있습니다. 추상 클래스에는 정적 주요 방법이있을 수 있습니다.
추상 클래스와 일반 클래스의 유일한 차이점은 인스턴스 객체를 생성하고 추상 방법을 허용 할 수 없다는 것입니다.
Clone () 메소드를 작성할 때는 일반적으로 코드 줄이 있습니다. 무엇입니까?
클론 () 방법은 복제하는 것입니다. 이는 물체를 복사하는 것을 의미합니다. 즉, A가 유효한 값을 포함하는 객체 A가 있지만 객체 B를 갖고 싶다면 B에 대한 변경 사항은 A의 값에 영향을 미치지 않지만 B에 대한 변경 사항은 새로운 객체가 아닙니다.
복사 : ① 사본 개체는 참조가 아니라 새 개체를 반환합니다. were 객체를 복사하는 것과 새 연산자와 함께 반환 된 객체의 차이점은 사본에 이미 객체의 초기 정보가 아닌 원래 객체의 정보가 포함되어 있다는 것입니다.
클론은 기본 동작, super.clone (); 먼저, 부모 클래스의 구성원을 제자리에 복사 한 다음 그 구성원을 복사해야하기 때문입니다.
객체 지향 기능의 측면은 무엇입니까?
객체 지향 프로그래밍 언어에는 캡슐화, 상속, 추상화 및 다형성의 네 가지 주요 기능이 포함됩니다.
1 패키지 :
포장은 소프트웨어 구성 요소의 모듈성을 갖도록하는 기초입니다. 포장의 목표는 프로그램 상호 의존으로 인한 변화를 방지하기 위해 소프트웨어 구성 요소의 "높은 응집력 및 낮은 커플 링"을 달성하는 것입니다. 객체 지향 프로그래밍 언어에서 객체는 가장 기본적인 캡슐화 단위이며 객체 지향 캡슐화는 기존 언어 캡슐화보다 명확하고 강력합니다. 객체 지향 캡슐화는 "모듈", 즉 클래스에서 객체의 특성과 동작을 설명하는 코드를 캡슐화하는 것입니다. 속성은 변수로 정의되며 동작은 메소드로 정의됩니다. 이 방법은 동일한 객체의 속성에 직접 액세스 할 수 있습니다. 일반적으로,이 변수에 액세스하는 변수를 넣고, 클래스의 모든 멤버 변수를 비공개로 정의하고, 클래스의 자체 메소드만이 멤버 변수에 액세스 할 수 있는데, 이는 기본적으로 객체의 캡슐화를 구현해야합니다. 원칙을 파악하십시오 : 동일한 클래스에서 동일한 작업에서 작동하는 방법과 관련 메소드를 넣고 동일한 클래스에서 작동하는 방법과 데이터를 넣으십시오.
2. 초록 :
추상화는 어떤 것들의 유사성과 공통성을 찾은 다음, 이들의 유사성과 공통성 만 고려하는 클래스로 분류하고 현재 주제 및 목표와 관련이없는 측면을 무시하고 현재 목표와 관련된 측면에 초점을 맞추는 것입니다. 예를 들어, 개미와 코끼리를 보면 그들이 어떤 것인지 상상할 수 있습니다. 그것은 추상화입니다. 추상화에는 행동 추상화와 상태 추상화의 두 가지 측면이 포함됩니다. 예를 들어, 개인 클래스를 다음과 같이 정의합니다.
클래스 사람 {문자열 이름; int 연령; } 인간은 원래 매우 복잡하고 많은 측면을 가지고 있지만, 현재 시스템은 사람의 이름과 나이 만 이해하면되기 때문에 위의 정의 된 계급에는 이름과 나이의 속성 만 포함됩니다. 이것은 추상화입니다. 추상화를 사용하면 목표와 관련이없는 일부 세부 사항을 고려하지 않을 수 있습니다.
3. 상속 :
클래스를 정의하고 구현할 때는 기존 클래스를 기반으로 수행 할 수 있으며 기존 클래스에 의해 정의 된 컨텐츠는 자체 컨텐츠로 사용되거나 여러 개의 새로운 컨텐츠를 추가 할 수 있거나 원래 방법을 수정하여 특별한 요구에 더 적합합니다. 이것은 상속입니다. 상속은 서브 클래스가 부모 클래스 데이터 및 방법을 자동으로 공유하는 메커니즘입니다. 이것은 클래스 간의 관계로 소프트웨어의 재사용 성과 확장 성을 향상시킵니다.
4 다형성 :
다형성은 프로그램에 정의 된 기준 변수에 의해 지적 된 특정 유형을 말하며, 참조 변수를 통해 발행 된 메소드 호출은 프로그래밍 중에 결정되지 않지만 프로그램 실행 중에 결정됩니다. 즉, 클래스 인스턴스 개체, 참조 변수가 가리키며, 참조 변수가 발행 한 클래스 메소드 호출은 프로그램 실행 중에 만 구현 될 수 있습니다. 특정 클래스는 프로그램이 실행될 때만 결정되므로, 기준 변수는 소스 프로그램 코드를 수정하지 않고 다양한 다른 클래스 구현에 바인딩 될 수 있으며, 이는 그에 따라 참조 통화의 특정 메소드로 연결됩니다. 즉, 프로그램 코드를 수정하지 않고 프로그램에 제한된 특정 코드는 프로그램이 다형성 인 여러 실행 상태를 선택할 수 있도록합니다. 다형성은 소프트웨어의 유연성과 확장 성을 향상시킵니다. 예를 들어, 다음 코드의 userDao는 참조 변수 userDAO가 가리키는 인스턴스 객체를 정의하고 실행시 daofactory.getDao ()에 의해 리턴됩니다. 때로는 userjdbcdao의 구현을 가리키며 때로는 userhibernatedao의 구현을 가리 킵니다. 이러한 방식으로 소스 코드를 수정하지 않고 userdao가 지적한 특정 클래스 구현을 변경하여 userDao.insertUser () 메소드의 특정 코드도 변경 될 수 있습니다. 즉, 때로는 userjdbcdao의 insertuser 메소드라고하며 때로는 userhibernatedao의 insertuser 메소드라고합니다.
userDao userDao = daofactory.getDao (); userdao.insertuser (사용자);
Java에서 다형성을 구현하는 메커니즘은 무엇입니까?
상위 클래스 또는 인터페이스에 의해 정의 된 기준 변수는 서브 클래스 또는 콘크리트 구현 클래스의 인스턴스 객체를 가리킬 수 있으며, 프로그램에서 불리는 메소드는 런타임 동안 동적으로 바인딩됩니다. 변수에 의해 지적 된 특정 인스턴스 객체, 즉 참조 변수의 유형에 정의 된 메소드가 아닌 메모리에서 실행되는 객체의 메소드를 지칭하는 메소드입니다.
추상 클래스와 인터페이스의 차이점은 무엇입니까?
초록 수정자를 포함하는 클래스는 추상 클래스로 생성 할 수없는 인스턴스 개체입니다. 추상 방법을 포함하는 클래스는 추상 클래스로 정의되어야하며, 추상 클래스 클래스의 방법은 추상적 일 필요는 없습니다. 초록 클래스 클래스의 추상 방법의 정의는 콘크리트 서브 클래스로 구현되어야하므로 추상 생성자 나 추상 정적 메소드가있을 수 없습니다. 서브 클래스가 추상 부모 클래스에서 모든 초록 메소드를 구현하지 않으면 서브 클래스는 추상 유형으로 정의되어야합니다.
인터페이스는 추상 클래스의 특별한 경우라고 할 수 있으며 인터페이스의 모든 메소드는 추상적이어야합니다. 인터페이스의 메소드 정의는 공개 추상 유형으로 기본값과 인터페이스의 멤버 변수 유형이 공개 정적 결승에 기본값을 표시합니다.
둘 사이의 문법적 차이 :
1. 초록 클래스에는 구성 방법이 있지만 인터페이스에는 없습니다.
2. 추상 클래스에는 일반 멤버 변수가있을 수 있지만 인터페이스에는 일반적인 멤버 변수가 없습니다.
3. 초록 클래스에는 비 임금 일반 방법이 포함될 수 있습니다. 인터페이스의 모든 메소드는 추상적이어야하며 비 임금 일반 방법이있을 수 없습니다.
4. 추상 클래스에서 추상적 인 방법의 액세스 유형은 공개, 보호 및 (기본 유형이지만, 이클립스에는 오류가 없지만 작동하지 않아야 함), 인터페이스의 초록 메소드는 공개 유형 일 수 있으며 기본값은 공개 초록 유형입니다.
5. 초록 클래스에는 정적 방법을 포함 할 수 있지만 인터페이스는 정적 메소드를 포함 할 수 없습니다.
6. 추상 클래스와 인터페이스 모두 정적 멤버 변수를 포함 할 수 있습니다. 추상 클래스에서 정적 멤버 변수의 액세스 유형은 임의적 일 수 있지만 인터페이스에 정의 된 변수는 공개 정적 최종 유형 일 수 있으며 기본값은 공개 정적 최종 유형입니다.
7. 클래스는 여러 인터페이스를 구현할 수 있지만 하나의 추상 클래스 만 상속받을 수 있습니다.
응용 프로그램의 두 가지의 차이점 :
인터페이스는 시스템 아키텍처 설계 방법에서 주로 모듈 간의 통신 계약을 정의하는 데 사용됩니다. 초록 클래스는 코드 구현에 중요한 역할을하며 코드 재사용을 실현할 수 있습니다. 예를 들어, 템플릿 메소드 설계 패턴은 추상 클래스의 전형적인 응용 프로그램입니다. 특정 프로젝트의 모든 서블릿 클래스가 동일한 방법을 사용하여 권한 판단, 액세스 로그를 기록하고 예외를 처리해야한다고 가정하면 모든 서블릿 이이 추상 기본 클래스를 상속 받고, 권한 판단을 완료하고, 초록 기본 클래스의 서비스 방법에서 예외를 처리 할 수 있도록 추상적 인 기본 클래스를 정의 할 수 있으며, 각 서브 클라스에서 각각의 비즈니스 로직 코드 만 완료 할 수 있습니다. 의사 코드는 다음과 같습니다.
공개 초록 클래스 BaseServlet는 httpservlet {public final void service (httpservletrequest request, httpservletreponse 응답)를 ioexcetion, servletexception {허가 판단에 대한 레코드 액세스 로그 (허가) {doservice (요청, 응답); doservice (httpservletrequest request, httpservletresponse 응답)는 ioexcetion, servletexception을 던졌습니다. // 액세스 권한은 보호 된 것으로 정의됩니다. 공개 클래스 MyServlet1은 BaseServlet (HttpservletRequest 요청, httpservletrequest 요청, httpservletrequest responsk)을 확장하기 때문에 전문적이고 엄격한 것처럼 보입니다.상위 클래스 메소드 중간에있는 특정 코드는 불확실하므로 하위 클래스에 맡기므로 템플릿 메소드를 사용하여 패턴을 설계합니다.
추상 방법이 동시에 정적 일 수 있고 동시에 기본적 일 수 있으며 동시에 동기화 될 수 있습니까?
초록 방법은 서브 클래스로 구현되어야하며 정적은 서브 클래스와 관련이 없기 때문에 초록의 방법은 정적 일 수 없습니다!
기본 방법은이 방법이 다른 플랫폼 의존적 프로그래밍 언어로 구현되어야하며 서브 클래스 구현에 문제가 없으므로 추상적이 될 수 없으며 초록과 혼합 할 수 없습니다. 예를 들어, FileOutputSteam 클래스는 하드웨어를 처리해야하며 기본 구현은 운영 체제 관련 API 구현을 사용합니다. 예를 들어, Windows에서 C 언어로 구현됩니다. 따라서 JDK의 소스 코드를 살펴보면 FileOutputStream의 열린 열린 메소드의 정의는 다음과 같습니다. 개인 기본 void Open (String Name)은 filenotFoundException을 던집니다.
Java를 사용하여 다른 사람들이 작성한 C 언어 함수를 호출하려면 직접 호출 할 수 없습니다. Java의 요구 사항에 따라 C 언어 기능을 작성해야하며 C 언어 기능은 다른 사람의 C 언어 기능을 호출합니다. 우리의 C 언어 기능은 Java의 요구 사항에 따라 작성되므로 C 언어 기능은 Java에 연결될 수 있습니다. Java의 도킹 방법은 C 함수에 해당하는 방법을 정의하는 것입니다. Java의 해당 방법은 특정 코드를 작성할 필요가 없지만 기본을 조기에 선언해야합니다.
동기화 된 경우, 메소드에 동기화 된 동기화에 의해 사용되는 동기화 잠금 객체는 이것이며, 추상 메소드는 이것이 무엇인지 결정할 수 없습니다.
내부 수업이란 무엇입니까? 정적 중첩 클래스는 내부 클래스와 다릅니다.
내부 클래스는 클래스 내부에서 정의 된 클래스입니다. 정적 멤버는 내부 클래스에서 정의 할 수 없습니다. 정적 멤버는 물체의 특성이 아닙니다. 그들은 단지 살 곳을 찾아야하므로 수업에 배치해야합니다. 내부 클래스는 외부 클래스에서 멤버 변수에 직접 액세스 할 수 있습니다. 내부 클래스는 외부 클래스의 방법 외부 또는 외부 클래스의 메소드 본문에서 다음과 같이 정의 할 수 있습니다.
공개 클래스 외부 {int out_x = 0; public void method () {inner1 inner1 = new Inner1 (); 공개 클래스 내부 2 // 메소드 내부에 정의 된 내부 클래스 {public method () {out_x = 3; }} inner2 inner2 = new Inner2 (); } public class 내부 1 // 내부 클래스가 메소드 본문 외부에 정의 된 내부 클래스 {}} 메소드 본문 외부에 정의 된 내부 클래스의 액세스 유형은 공개, 보호 및 기본 개인 일 수 있습니다. 이는 클래스에 정의 된 멤버 변수에 4 개의 액세스 유형이있는 것과 같습니다.이 유형은 내부 클래스의 정의가 다른 클래스에 보이는지 여부를 결정합니다. 이 경우 외부 내부 클래스의 인스턴스 객체를 만들 수도 있습니다. 내부 클래스의 인스턴스 개체를 만들 때 먼저 외부 클래스의 인스턴스 객체를 작성한 다음 외부 클래스의 인스턴스 개체를 사용하여 내부 클래스의 인스턴스 개체를 만듭니다. 코드는 다음과 같습니다.
외부 외부 = 새로운 외부 ();
OUTER.inner1 내부 1 = outer.new innner1 ();
방법에 정의 된 로컬 변수와 마찬가지로 메소드 내부 내부 클래스 전에 액세스 유형 수정자가있을 수 없지만 내부 클래스 전에 최종 또는 추상 수정자를 사용할 수 있습니다. 이 내부 클래스는 다른 클래스에 보이지 않으며이 내부 클래스를 언급 할 수는 없지만이 내부 클래스에서 만든 인스턴스 개체는 다른 클래스로 전달하여 액세스 할 수 있습니다. 이러한 종류의 내부 클래스는 먼저 정의 된 다음 사용되어야합니다. 즉, 클래스를 사용하기 전에 내부 클래스의 정의 코드가 나타나야합니다.이 방법은 메소드의 로컬 변수를 먼저 정의하고 사용해야하는 원칙과 동일합니다. 이 내부 클래스는 메소드 본문의 로컬 변수에 액세스 할 수 있지만 최종 수정자는 로컬 변수 전에 추가해야합니다.
이 방법에서 다음 구문은 익명의 내부 클래스를 생성하는 데 사용될 수 있습니다. 즉, 클래스의 특정 인터페이스 또는 서브 클래스를 정의하면 서브 클래스의 인스턴스 개체도 서브 클래스의 이름을 정의하지 않고 생성됩니다.
public class OUTER {public void start () {new Thread (new Runable () {public void Run () {};}). start (); }} 마지막으로, 메소드 외부에 정의 된 내부 클래스를 정적 중첩 클래스에 추가하여 정적 키워드를 추가 할 수 있습니다. 더 이상 내부 클래스의 특성이 없습니다. 모두 좁은 의미에서 내면의 클래스가 아닙니다. 정적 중첩 클래스는 런타임시 일반 클래스의 동작과 기능에서 다르지 않지만 참조를 프로그래밍 할 때 구문에는 차이가 있습니다. 일반 클래스는 공개, 보호, 기본, 개인 및 기타 유형으로 정의 할 수 있지만 일반 클래스는 공개 및 기본 유형으로만 정의 할 수 있습니다. 외부의 정적 중첩 클래스 클래스의 이름은 "외부 클래스 이름 .inner 클래스 이름"입니다. 외부 클래스의 인스턴스 개체를 만들지 않고도 정적 중첩 클래스를 직접 만들 수 있습니다. 예를 들어, 내부가 외부 클래스에 정의 된 정적 중첩 클래스 인 경우 다음 문을 사용하여 내부 클래스를 만들 수 있습니다.
OUTER.INNER 내부 = 새 OUTER.INNER ();
정적 중첩 클래스는 외부 클래스의 인스턴스 객체에 의존하지 않기 때문에 정적 중첩 클래스는 외부 클래스의 비 정적 멤버 변수에 액세스 할 수 있습니다. 외부 클래스에서 정적 중첩 클래스에 액세스 할 때 외부 클래스의 이름을 추가하지 않고도 정적 중첩 클래스의 이름을 직접 사용할 수 있습니다. 정적 중첩 클래스에서 외부 클래스의 이름을 추가하지 않고 외부 클래스의 정적 멤버 변수를 직접 참조 할 수도 있습니다.
정적 메소드로 정의 된 내부 클래스는 또한 정적 중첩 클래스입니다. 현재 수업 전에 정적 키워드를 추가 할 수 없습니다. 정적 방법의 정적 중첩 클래스는 일반적인 방법에서 내부 클래스의 응용 방법과 매우 유사합니다. 외부 클래스에서 정적 멤버 변수에 직접 액세스하는 것 외에도 정적 메소드에서 로컬 변수에 액세스 할 수도 있습니다. 그러나 최종 수정자는 로컬 변수 전에 추가해야합니다.
내부 클래스가 포함 된 클래스의 구성원을 참조 할 수 있습니까? 제한 사항이 있습니까?
완전히 괜찮습니다. 정적 내부 클래스가 아니라면 제한이 없습니다!
정적 중첩 클래스를 내부 클래스의 특별한 경우로 취급하는 경우이 경우 외부 클래스의 일반 멤버 변수에 액세스 할 수는 없지만 외부 클래스의 정적 멤버 만 액세스 할 수 없습니다. 예를 들어 다음 코드 :
클래스 외부 {static int x; 정적 클래스 내부 {void test () {syso (x); }}}}익명의 내부 클래스 (익명 내부 클래스)는 다른 클래스를 연장 할 수 있으며 인터페이스 (인터페이스) (구현)를 구현할 수 있습니까?
다른 클래스를 상속하거나 다른 인터페이스를 구현할 수 있습니다. 할 수있을뿐만 아니라해야합니다!
예를 들어:
import java.util.date; public class test 확장 날짜 {public static void main (String [] args) {new test (). test (); } public void test () {system.out.println (super.getClass (). getName ()); }} 결과는 테스트입니다
테스트 방법에서 getClass (). getName () 메소드가 직접 호출되고 테스트 클래스 이름이 반환됩니다. getClass ()는 객체 클래스에서 최종으로 정의되므로 서브 클래스는 메소드를 덮어 쓸 수 없습니다. 따라서 테스트 메소드에서 getClass (). getName () 메소드를 호출하는 것은 실제로 부모 클래스에서 상속 된 getClass () 메소드를 호출하는데, 이는 super.getClass (). getName () 메소드를 호출하는 것과 같습니다. 따라서 super.getClass (). getName () 메소드도 테스트를 반환해야합니다. 상위 클래스의 이름을 얻으려면 다음 코드를 사용해야합니다.
getClass (). getSuperClass (). getName ();
객체 지향과 프로세스 지향의 차이점은 무엇입니까?
1 출발점은 다릅니다. 객관적인 접근 방식은 기존의 사고를 준수하는 방식으로 객관적인 세계의 문제를 다루는 것입니다. 문제 도메인의 핵심 사항은 객체 간의 인터페이스에 직접 암시된다는 점을 강조합니다. 프로세스 지향적 접근 방식은 프로세스 중심의 구성 또는 객관적인 세계 문제를 다루는 프로세스의 추상화와 모듈성을 강조합니다.
2. 객체 지향 방법은 컴퓨터 로직을 사용하여 객관적인 세계의 물리적 존재를 시뮬레이션하고 객체 컬렉션 클래스를 문제를 처리하기위한 기본 단위로 사용하여 컴퓨터 세계가 가능한 한 객관적인 세계에 더 가깝게 만들어서 문제를보다 직접적이고 명확하게 만듭니다. 객체 지향 방법은 클래스 계층 구조를 사용하여 클래스 간의 상속 및 개발을 반영하는 반면, 객체 지향 프로세스 방법은 프로세스를 명확하고 정확하게 표현하는 모듈을 활성화하고 모듈 계층을 사용하여 모듈 또는 모듈 간의 관계와 기능을 요약하고 목표를 구성 할 수있는 프로세스를 추상화하는 기본 단위의 문제를 처리합니다.
3 데이터 처리 방법은 제어 프로그램 방법과 다릅니다. 객체 지향 메소드는 데이터와 해당 코드를 전체적으로 캡슐화합니다. 원칙적으로 다른 객체는 데이터를 직접 수정할 수 없습니다. 즉, 객체의 수정은 자체 멤버 함수에 의해서만 완료 될 수 있습니다. 제어 프로그램 방법은 "이벤트 중심"을 통해 프로그램을 활성화하고 실행하는 것입니다. 객체 지향 프로세스는 프로그램을 통해 데이터를 직접 처리하고 처리 결과가 완료된 후에 처리 결과가 표시됩니다. 프로그램 제어 측면에서, 프로그램은 설계에 따라 프로그램으로 호출되거나 반환되며 내비게이션이 될 수 없습니다. 모듈, 컨트롤과 컨트롤, 통화 및 통화간에 관계가 있습니다.
4 분석 설계 및 인코딩 변환 방법은 다릅니다. 소프트웨어 수명주기 전체에 걸쳐 객체 지향적 접근법 분석. 디자인 및 코딩에서는 원활한 프로세스입니다. 분석에서 디자인 및 코딩에 이르기까지 일관된 모델을 사용하여 표시됩니다. 즉, 완벽한 연결입니다. 객체 지향 프로세스 방법은 규칙에 따라 분석 설계와 코딩 사이의 전환을 강조하며 소프트웨어 수명주기 전체의 분석 및 설계 및 코딩이 달성됩니다.
객체 지향 개발의 장점은 무엇입니까?
1 높은 개발 효율성. 객체 지향 개발을 사용하면 실제 사물을 추상화하고 실제 관행을 개발 된 물체에 직접 매핑 할 수 있습니다.
2 소프트웨어의 견고성을 확인하십시오. 객체 지향 개발 방법의 재사용 성이 높기 때문입니다. 개발 과정에서 관련 필드에서 테스트 된 기존 코드가 재사용되었습니다. 따라서 자연스럽게 소프트웨어의 견고성을 촉진하는 데 좋은 역할을합니다.
3 소프트웨어의 높은 유지 보수를 보장하십시오. 객체 지향 개발 방법으로 인해 코드를 매우 잘 읽을 수 있습니다. 동시에 객체 지향 설계 패턴은 코드 구조를 더 명확하게 만듭니다. 동시에 객체 지향 개발 모델의 경우 이미 매우 성숙한 디자인 패턴이 많이 있습니다. 이러한 설계 패턴을 사용하면 프로그램이 수요의 변화에 직면 할 때만 일부 모듈 만 수정할 수 있습니다. 유지 관리가 더 편리하기 때문입니다.
이것과 슈퍼의 차이점은 무엇입니까?
Java 언어에서 이것은 현재 인스턴스 객체를 가리 킵니다. 매우 중요한 함수 중 하나는 객체의 멤버 변수를 메소드의 공식 매개 변수와 구별하는 것입니다 (메소드 이름이 멤버 변수에 참여하면 멤버 변수가 덮어 쓰기).
수퍼는 상위 클래스의 메소드 또는 멤버 변수에 액세스하는 데 사용할 수 있습니다. 아동 클래스의 메소드 또는 멤버 변수가 부모 클래스와 동일한 이름을 갖는 경우, 상위 클래스의 메소드 또는 멤버 변수도 덮어 씁니다. 상위 클래스의 메소드 또는 멤버 변수에 액세스하려면 슈퍼 키워드를 통해서만 액세스 할 수 있습니다.
부모 클래스의 클래스 이름을 얻는 방법
Java Language는 클래스 이름을 얻는 메소드를 제공합니다 : getClass (). getName (). 개발자는이 방법을 호출하여 클래스 이름을 얻을 수 있습니다. 그러나 상속의 경우 getClass (). getName () 메소드를 부모 클래스의 메소드를 호출하여 부모 클래스 이름을 얻을 수 없습니다.
클래스 A {} 공개 클래스 테스트는 {public void test () {system.out.println (super.getClass (). getName ());} public static void main (string []) args) {new Test.Test ();}}을 확장합니다.프로그램 실행 결과는 테스트입니다. 그 이유는 Java 언어의 모든 클래스가 객체 클래스에서 상속되기 때문입니다. getClass 메소드는 객체 클래스에서 최종 기본으로 정의됩니다. 서브 클래스는이 방법을 무시할 수 없습니다. 따라서 this.getClass () 및 super.getClass ()는 마침내 객체 클래스에서 getClass () 메소드를 호출합니다. 객체 클래스에서 getClass () 메소드의 정의는 다음과 같습니다.이 객체의 런타임 클래스를 반환합니다. 부모 클래스의 이름 코드는 다음과 같이 Java의 반사 메커니즘을 통해 서브 클래스에서 얻을 수 있습니다.
클래스 A {} 공개 클래스 테스트는 {public void test () {system.out.println (this.getClass (). getSuperClass (). getName ());} publci static void main (String [] args) {new test (). test ();}}을 확장합니다.조합과 상속의 차이점은 무엇입니까?
구성과 상속은 객체 지향에서 코드를 재사용하는 두 가지 방법입니다. 조합은 새 클래스에서 원래 클래스의 객체를 작성하고 기존 클래스의 기능을 재사용하는 것을 말합니다. 상속은 객체 지향의 주요 특징 중 하나이며 디자이너는 다른 클래스의 구현에 따라 클래스의 구현을 정의 할 수 있습니다. 구성과 상속은 모두 구성이 표시되는 것을 제외하고는 상속이 암시적인 것을 제외하고는 새로운 클래스에서 하위 물체를 설정할 수 있습니다. 조합과 상속 사이에는 대응이 있습니다. 구성의 전체 클래스는 상속의 서브 클래스에 해당하고 구성의 로컬 클래스는 상속의 부모 클래스에 해당합니다. 그것을 사용할 때 다음 두 가지 원칙을 따르십시오.
1 두 클래스간에 "IS-A"관계가 없다면 상속을 과도하게 사용하면 코드의 유지 관리 가능성이 파괴되기 때문에 상속을 쉽게 사용하지 마십시오. 상위 클래스가 수정되면 상속 된 모든 서브 클래스에 영향을 미칩니다.
2. 다형성을 달성하기 위해 상속을 사용하지 마십시오. 클래스 간의 관계가 "IS-A"가 아닌 경우 인터페이스와 조합을 구현하여 동일한 목적을 달성 할 수 있습니다.
Java 언어는 단일 상속 만 지원하므로 동시에 두 개 이상의 클래스를 상속하려면 Java에서 직접 구현할 수 없습니다. 동시에, Java 언어에서, 너무 많은 상속이 달성되면, 클래스의 내용이 부풀어 질 것입니다. 따라서 Java 언어에서 조합을 사용할 수 있다면 상속을 사용하지 마십시오.
읽어 주셔서 감사합니다. 도움이되기를 바랍니다. 이 사이트를 지원 해주셔서 감사합니다!