201871010104- 첸 유아 니안 "객체 지향 프로그래밍 (자바)"여덟째 주 학습 요약

                                                                                                             201871010104- 첸 유아 니안 "객체 지향 프로그래밍 (자바)"여덟째 주 학습 요약

계획
함유량
이 작품은 과정 속 https://www.cnblogs.com/nwnu-daizh/
어디 작업이 필요 https://www.cnblogs.com/lily-2018/p/11441372.html
작업 학습 목표

(1) 방법 마스터 인터페이스 정의;

(2) 마스터 인터페이스 클래스 구현 정의 요건;

(3) 마스터 인터페이스 클래스의 사용 요건을 구현;

(4) 콜백 마스터 디자인 패턴;

(5) 마스터 비교기 인터페이스의 사용;

(6) 오브젝트 얕은 깊이 복사 복사 방식을 파악;

(7) 마스터 람다 표현 구문;

(8) 사용은 클래스 내에서 필요한 문법을 ​​배운다.

부 : 이론적 지식의 요약

 

추상 클래스입니다 :

 

       선언에 추상적으로, 클래스 객체의 특정 인스턴스가없는, 새로운 객체를 생성하는 데 사용할 수 없습니다. 그것은 어떤 기존의 클래스가 일을 포함 포함 할 수있다. 추상 서브 클래스는 다시 작성해야합니다 추상 클래스, 부모 클래스의 모든 추상 메소드의 서브 클래스가 아닌 경우 추상 클래스, 서브 클래스에 의해 상속해야합니다.

 

인터페이스 :

 

       계산서를 가진 인터페이스 정의 추상 메소드와 상수 값의 모음입니다. 본질적으로, 인터페이스는 추상 클래스는 상수와 메소드를 포함 정의하지만 변수와 메소드를 정의하지 않는 특별한 추상 클래스이다. 인터페이스는 추상 메소드를 정의 할 수 있습니다, 이러한 방법은 기본적으로 공개됩니다. 한 클래스가 인터페이스를 구현, 당신은이 인터페이스에 필요한 곳이 클래스의 객체를 사용할 수 있습니다. 또한, 클래스는 여러 인터페이스를 구현할 수 있습니다.

 

추상 클래스와 인터페이스의 차이 :

 

(1) 임의의 인터페이스 방법에 의해 달성 될 수없고, 추상 클래스 일 수있다.

 

(2) 클래스는 여러 인터페이스를 구현할 수 있지만 부모 수 있습니다.

 

부 (3) 인터페이스의 클래스의 접촉이 동일한 인터페이스를 구현할 수없이 클래스 계층이 아닙니다.

인터페이스의 정의에있어서 : 자바 프로그래밍 언어에서, 인터페이스는 클래스 아니지만 클래스 요구 사항 세트 및 상수 추상 방법 조성물 세트에 의해 설명된다. 인터페이스는 변수와 메소드를 특정 구현에 포함되지 않습니다. 한 클래스가 인터페이스를 구현 한, 클래스는 인터페이스 설명이 정의되어 균일 한 형식을 따라야합니다, 당신은 그들이 인터페이스에 필요한 곳이 클래스의 객체를 사용할 수 있습니다.

인터페이스의 구현 : 구현 키워드 클래스 선언과 사용이 클래스는 다음 클래스는 모든 인터페이스 메소드를 구현해야하는 인터페이스를 사용하여 하나 이상의 인터페이스를 선언, 이러한 방법은 메소드 본문을 제공해야한다.
 인터페이스는 콤마로 분리해야하는 클래스 간의 여러 인터페이스를 구현할 수있다.

인터페이스 요구 사항 : 인터페이스 인터페이스 객체를 구축 할 수 없지만 인터페이스는 인터페이스를 구현하는 객체 클래스를 가리 키도록 변수를 선언 할 수 있습니다.

 

콜백 (콜백) :

 

       프로그램에서 특정 이벤트가해야 할 때 프로그래밍 모드는이 모드에서, 당신은 행동을 지적 할 수있다. 개체 변수를 복사하고, 복사 할 때 원래의 가변 변수가 동일한 객체를 참조. 이러한 방법으로, 다른 변수는 변수 영향에 의해 참조 된 객체를 변경합니다. 당신은 복사, 원본과 원래 상태의 새로운 객체를 만들기를 원하지만, 나중에 자신의 상태를 변경할 수 있다면, 우리는 Object 클래스의 clone 메소드를 사용해야합니다. 복제 Object 클래스 () 메소드는 기본 방법입니다. 복제 Object 클래스 () 메소드는 보호 수정을 수정됩니다. 이렇게하면 사용자가 작성한 코드에서 직접 호출 할 수 없습니다 것을 의미합니다. 속성이 적용되는 경우에 직접 복제 () 메소드를 포함하는 필요 상, () 메소드를 복제하고 () 메소드는 공개로 설정 복제한다. 따라서 Object.clone () 메소드는 Object 객체를 반환합니다. 당신은 필요한 유형을 얻을 캐스트해야합니다.

타이머 클래스가있다, 주어진 시간 간격 java.swing 패키지에 도착하면 이벤트를 트리거하는 데 사용할 수 있습니다.

 

얕은 복사 :

 

        객체가 상수 특성 기본 유형의 모든 구성원에 복사는 대상물의 원본과 동일한 값을 가지며, 개체는 도메인의 멤버 인 경우, 여전히 원래의 오브젝트를 가리키는 도메인 객체 참조 객체의 복사본이었다.

 

깊은 복사 :

 

       도메인의 모든 구성원은 물체가 원래의 목표와 같은 값을 포함 복사되고 대상 도메인은 원본 객체의 객체가 참조되지 않는, 복사 새 개체를 가리 킵니다. 즉, 전체 복사본을 다시 복사 할 개체 내에서 참조 된 개체를 복사합니다.

 

자바는 복제 구현 객체 :

 

       복제 가능한 인터페이스는 하위 클래스에서 구현했습니다. 개체의 사본을 얻기 위해, 방법은 클론 객체 클래스가 사용될 수있다. public으로 선언 된 서브 클래스의 clone 메소드의 슈퍼 클래스를 재정의합니다. 복제 방법은 서브 클래스에서 super.clone에 ()를 호출한다.

 

파트 II : 실험 부분

실험 1 :  6 장 샘플 프로그램, 시험 절차 및 코드 주석을 소개합니다.

시험 절차 1 :

1) 편집, 컴파일, 디버깅 및 읽기 교과서 페이지를 214-215 페이지 프로그램 6-1, 6-2, 프로그램을 이해하고 프로그램의 결과를 분석을 실행;

2) 프로그램의 관련 코드에서 주석 새로운 지식을 추가합니다.

3) 마스터 인터페이스의 사용을 구현할; Compareable 내장 인터페이스의 사용을 마스터.

다음과 같이 코드입니다 :

EmployeeSortTest 클래스
인터페이스 포장재 

오기 클래스 * ;. java.util에서 

/ ** 
 . *이 프로그램은 필적 인터페이스의 사용 보여 
 * @version을 1.30 2004년 2월 27일 
 * @author 케이 HORSTMANN 
 *은 / 
공용 클래스 EmployeeSortTest 
{ 
   공공 정적 무효 메인 (문자열 [] 인수)는 
   { 
	  직원은 [] = 새로운 신입 사원 직원 [3.]; // 세 직원의 어레이를 만들 

      직원 [0] 새 새로운 종업원 ( "해리 해커"35000) =] 
      [. 1] 스탭 직원 새로운 새로운 ( "칼 = 크래커 "75000)는, 
      직원 [2] 새로운 신입 사원 = ("토니 테스터 "38000) 

      Arrays.sort에 (스탭) 배열을 정렬 클래스 Employee 오브젝트의 정렬 // 어레이 (정적 메소드 수정 그것은) 호출되어야 

     모든 정보 직원 개체를 인쇄 // 
      (직원 전자에 대한 : 직원)
         에서 System.out.println ( "NAME ="+ e.getName () + ", 급여 ="+ e.getSalary ()); 
   } 
}
 Employee 클래스
패키지 인터페이스; 

공용 클래스 직원에 Comparable <직원> //实现接口类구현 
{ 
   개인 문자열 이름; 
   개인 이중 급여; 

   공무원 (문자열 이름을 두 번 급여) 
   { 
      this.name = 이름; 
      this.salary = 급여; 
   } 

   공공 문자열 getName () 
   { 
      반환 이름; 
   } 

   공공 더블 getSalary () 
   { 
      급여를 반환; 
   } 

   공개 무효 raiseSalary (더블 byPercent) 
   { 
      이중 레이즈 = 급여 * byPercent / 100; 
      급여 + = 인상; 
   } 

   / **  
    * 봉급으로 직원을 비교
    * @param 다른 또 다른 Employee 객체 
    이 직원보다 낮은 급여 경우 네거티브 값 @return * 
    * otherObject 0, 급여가 같은 경우, 양의 값을 달리 
    * / 
   공용 INT은 compareTo (다른 직원)는 
   { 
      Double.compare를 반환 (급여 other.salary); //将雇员的급여进行의比较
   } 
}

 결과는 다음과 같습니다 :

시험 절차 2 :

편집, 프로그램을 이해하는 프로그램의 결과와 함께 실행하는 프로그램을 디버깅, 컴파일;

계면 A를 
{ 
  이중 g = 9.8; 
  무효 표시 (); 
} 
클래스 C는 구현 
{ 
  공개 무효 표시 () 
  {에서 System.out.println ( "g ="+ g)을} 
} 

클래스 InterfaceTest 
{ 
  공공 정적 무효 메인 (문자열 []에 args)를 
  { 
       A A = 새로운 C (); 
       a.show (); 
       에서 System.out.println ( "g ="+의 Cg); 
  } 
}

결과는 다음과 같습니다 :

 

 시험 절차 3 :

1)에서 elipse의 IDE 교과서 스타트 (223)에게 이 페이지 6-3 프로그램 이해 실행 결과와 함께;

2) 26 개 라인 36 개 라인은 볼 (224 개) 재료에 관한 페이지보기 12 캡.

3) 프로그램의 관련 코드에서 주석 새로운 지식을 추가합니다. 콜백 마스터 프로그래밍 모드;

다음과 같이 코드입니다 :

타이머를 패키지; 

/ ** 
   @version 1.02 2017년 12월 14일 
   케이 HORSTMANN @author 
* / 

수입 java.awt의. *; 
java.awt.event의를 가져옵니다. *; 
수입 java.util.Date; 

javax.swing의를 가져옵니다. *; 

공용 클래스 TimerTest 
{   
   공공 정적 무효 메인 (문자열 []에 args) 
   {   
      된 ActionListener 새로운 청취자 = TimePrinter (); 
        //构造一个定时器为리스너 
            // 10秒一次
      타이머 t = 새로운 타이머 (1000 수신기); 
      t.start (); 

      사용자가 "확인"을 선택할 때까지 // 프로그램을 계속 실행 
      JOptionPane.showMessageDialog을 (널 (null) "프로그램을 종료?"); 
      을 System.exit (0); 
   } 
}

클래스 TimePrinter는 ActionListener를 구현 
{   
   공공 무효의 actionPerformed (ActionEvent의 이벤트) 
   {   
      에서 System.out.println이 ( "톤에서, 시간이를" 
         + 새 Date ()); 
      Toolkit.getDefaultToolkit () 비프 ().; 
   } 
}

 결과는 다음과 같습니다 :

 시험 절차 4 :

1) 교과서를 시운전 229 페이지 -231 페이지 프로그램 6-4 , 6-5 , 프로그램의 결합 된 결과는 프로그램을 이해;

2) 프로그램의 관련 코드에서 주석 새로운 지식을 추가합니다.

3) 달성하는 기술을 클로닝 목적을 파악;

딥 카피 차이 대 4) 마스터 얕은.

다음과 같이 코드입니다 :

 CloneTest 클래스

패키지 복제; 

/ ** 
 *이 프로그램은 복제를 보여줍니다. 
 * @version 1.11 2018년 3월 16일 
 * @author 케이 HORSTMANN 
 *이 / 
공용 클래스 CloneTest는 
{ 
   공공 정적 무효 메인 (문자열 []에 args)는 CloneNotSupportedException 던졌습니다 
   { 
	   {시도 //子句后面是有可能会产生异常的代码하려고 
	  직원을 원래 = 새로운 직원 ( "존 Q. 공개", 50000); 
      original.setHireDay (2000, 1, 1); 
      종업원 복사 original.clone = (); 
      copy.raiseSalary (10); 
      copy.setHireDay (2002, 12, 31); 
      에서 System.out.println (일본어 + "= 일본어"); 
      에서 System.out.println ( "복사 ="+ 복사); 
   }
	   복제 가능한 인터페이스 구현되지 캐치 (CloneNotSupportedException가 E는) // 예외 발생
	   { 
		   E.printStackTrace (); 
	   } 
   } 
}

  Employee 클래스

패키지 복제; 

수입 java.util.Date; 
수입 java.util.GregorianCalendar의; 

공용 클래스 직원은 Cloneable을 //创建深拷贝구현 
{ 
   개인 문자열 이름; 
   개인 이중 급여; 
   개인 날짜 hireDay; 

   공무원 (문자열 이름을 두 번 급여) 
   { 
      this.name = 이름; 
      this.salary = 급여; 
      hireDay = 새로운 날짜 (); 
   } 

   공무원 클론 () CloneNotSupportedException가 발생 
   { 
	 
	 //调用对象克隆
      직원 클로닝 = (사원) super.clone에 (); 

     //克隆易变字段
      cloned.hireDay = (일) hireDay.clone (); 

      복제 반환; 
   }
 
   / **
    * 주어진 날짜에 대여 일 설정합니다. 
    * 대여 일의 @param 년 올해 
    파라미터 : 달 대여 일의 달 
    파라미터 : 하루 대여 하루의 날 
    * / 
   공공 무효 setHireDay (INT 년, INT 월, INT 일) 
   { 
      날짜 newHireDay = 새 GregorianCalendar를 (년, 월 - 일, 일) .getTime (); 
      
      // 인스턴스 필드 돌연변이의 예를 
      hireDay.setTime (newHireDay.getTime ()); 
   } 

   공개 무효 raiseSalary (더블 byPercent) 
   { 
      이중 레이즈 = 급여 * byPercent / 100; 
      급여 + = 인상; 
   } 

   공공 문자열 toString () 
   {
      창 "직원 [NAME ="이름 + + ", 급여 ="+ 급여 + "hireDay ="+ hireDay + "]"; 
   } 
}

결과는 다음과 같습니다 :

깊은 복사 얕은 복사의 차이

얕은 복사 : 객체가 상수와 속성의 기본 유형의 모든 구성원에 복사 개체의 원본과 같은 값을 가지고 있고, 물체가 도메인의 구성원 인 경우, 여전히 원래 개체를 가리키는 도메인을 복사 할 대상의 대상이었다.

깊은 복사 : 복사되는 도메인의 모든 구성원은 물체가 원래의 목표와 같은 값을 포함 복사되고 대상 도메인이 새 개체를 가리 킵니다, 원본 객체의 객체가 아니라 참조되는. 즉, 전체 복사본을 다시 복사 할 개체 내에서 참조 된 개체를 복사합니다.

 실험 2 : 첫 번째 도입 6 장 예제 프로그램 6 6 배우고 학습 람다 표현식 사용합니다. 

1) 교과서를 시운전 233 페이지 -234 페이지 프로그램 6-6 , 프로그램의 결합 된 결과는 프로그램을 이해;

2) 프로그램의 관련 코드에서 주석 새로운 지식을 추가합니다.

3) 27-29 선 교재 223 비교 페이지 프로그램은 27-29 이 맞춰 절차 콘트라스트가 발생할 람다 이점 식.

다음과 같이 코드입니다 :

 

 

  

  

 

 

  

 

엘 

인터페이스 A를

{

  이중 g = 9.8;

  void show( );

}

class C implements A

{

  public void show( )

  {System.out.println("g="+g);}

}

 

class InterfaceTest

{

  public static void main(String[ ] args)

  {

       A a=new C( );

       a.show( );

       System.out.println("g="+C.g);

  }

}

实验总结:

在做实验时,有学长以及老师的讲解,是我对接口的知识有了更深一层的理解,以及在后面的自主练习的实验中,虽然对实验的认知还不太透彻,希望在后期的学习中能加强吧。

추천

출처www.cnblogs.com/chanyeol1127/p/11697560.html