オブジェクト向けCh.3-3継承と多形性~Ch.4-4 String Buffer


Ch.3-3継承と多形性


理由を引き継ぐ


データの再使用、重複削除、階層化、管理

特長


多重継承不可(複数の親x)

メソッドオーバーロード


親メソッドを上書きし、子メソッドを実行

継承時のコンストラクション関数フィーチャー

  • 命令がない場合、サブクラスは親のデフォルトジェネレータ
  • を呼び出す.
  • super()を使用して親ジェネレータを明示的に呼び出す(サブジェネレータコードの後にxを呼び出す)
    親作成者
  • public Point(int x, int y) {
    		this.x = x;
    		this.y = y;	
    	}
    サブクラス作成者
     	public ColorPoint(int x, int y, String color) {
    		super(x,y);
    		this.color = color;
            //super(x,y) : 오류
    	}

    オブジェクトのシェイプを変換


    選択


    子を親に変換
    タイプ変換を明示的に行う必要はありません.

    降格


    リダイレクト
    明示的に変換する必要があります
    public class StudentTest {
    	public static void main(String[] args) {
    	Student s1 = new Student();
    		s1.setGrade(1);
    		
    		Person p1 = s1; 	//upcasting(암시적,Implicity)
    		p1.setName("둘리");		
    		
    		Student s2 = (Student)p1;	//downcasting(명시적, explicity)
    		s2.setMajor("cs");
            }
    }

    Ch.3-4抽象クラスとインタフェース


    抽象クラス


    エンティティ・クラスの共通属性を抽出して宣言するクラス.
    オブジェクトを直接作成および使用できません
    拡張用
    1つ以上の抽象メソッドがあります(ない場合は、サブクラスに宣言する必要があります).
    ->抽象的な方法がなくても抽象クラスかもしれません

    インタフェース


    クラス間の類似した属性(変数、メソッド)を取得し、不自然な継承関係を設定しない

    特長


    複数を継承可能(+インタフェース間で複数を継承可能)
    インタフェースを実装するクラスで抽象メソッド(インタフェースで宣言されたメソッド)を定義する必要があります.

    Ch.3-4-6一般クラスVS抽象クラスVSインタフェース



    ch.3-4-7 Instanceof演算子

    		System.out.println(circle instanceof Object); // circle이 Object클래스의 인스턴스인지
    		System.out.println(circle instanceof Shape); //circle이 Shape클래스의 인스턴스인지
    		System.out.println(circle instanceof Circle);
    		// 오류: class는 hierachy 상위와 하위만 instanceof 연산자를 사용할 수 있다.
    //		System.out.println(circle instanceof Rectangle);   : 오류 구문
    		
    		//interface는 hierachy와 상관없이 instanceof 연산자를 사용할 수 있다.
    		System.out.println(circle instanceof Drawable); // circle이 Drawable 인터페이스를 구현했는지
    		System.out.println(circle instanceof Runnable);// circle이 Runnable 클래스의 인스턴스인지
    結果値
    true
    true
    true
    true
    false

    Ch.3-6異常処理


    異常処理は非常に有用である。


    1)ファイル処理時
    ファイルが存在しないか、他のプロセスで使用されている場合、例外が発生します.
    2)I/O処理
    クローズされたI/Oストリームの処理中に異常が発生しました
    3)ネットワークによるデータ通信
    サーバまたはクライアントから応答がありません.
    ネットワークの状態が悪く、所定の時間内にデータを受信できません.

    カスタム例外


    Exceptionクラス(例外の上位クラス)を継承して、新しい例外を定義できます.
    通常は作成者のみが実装されます

    CH 4 Java基本API

            Point p = new Point(10,20);
    		
    		//Class klass = p.getClass();
    		System.out.println(p.getClass()); 	//refrection
    		System.out.println(p.hashCode()); 	// address 기반의 해싱값
    											// address x
    											// reference x
    		System.out.println(p.toString());	//getClass() + "@" + hashCode()
    		System.out.println(p);
    toStringコード
    public String toString() {
    		return "Point [x=" + x + ", y=" + y + "]";
    	}
    結果値
    class chapter04.Point
    1291
    Point [x=10, y=20]
    Point [x=10, y=20]
    .getClass():現在参照されているクラスを確認できます
    .hasCode():アドレスベースのハッシュ値をチェック

    同質性vs同質性


    同一性比較:==
    同質性比較:オブジェクト1.equals(オブジェクト2)
    		Point p1 = new Point(10,20);
    		Point p2 = new Point(10,20);
    		Point p3 = p2;
    		
    		// == : 두 객체의 동일성을 비교
    		System.out.println(p1 == p2);
    		System.out.println(p2 == p3);
    		
    		// equals : 두 객체의 동질성 비교(내용비교)
    		// 부모 클래스 Object의 기본 구현은 동일성(==) 비교와 같다.
    		System.out.println(p1.equals(p2));
    		System.out.println(p2.equals(p3));
    結果
    false
    true
    true
    true

    Ch4. 1-3 String Class


    特殊文字の表示と出力


    C:temp出力
    System.out.println("c:\temp");
    「hello」出力
    System.out.println("\"hello\"");

    文字列関連API


    		String s1 = "abc";
    		String s2 = "def";
    		String s3 = s2;
    		
    		s2 = s1.toUpperCase();
    		String s4 =  s2.concat("??");
    		String s5 = "!".concat(s2).concat("@");
    		System.out.println(s1);
    		System.out.println(s2);
    		System.out.println(s3);
    		System.out.println(s4);
    		System.out.println(s5);
    結果
    abc
    ABC
    def
    ABC??
    !ABC@

    StringBuffer


    1.可変サイズのバッファ
    2.Stringオブジェクトが一度に作成した文字列を変更できない場合とは異なり、StringBufferオブジェクトは変更できます.(文字列バッファのサイズは文字列の長さによって変化します)
    		//String s1 = "Hello " + "World " + "Java" + 1.8; 이후에 문자열 추가못함
    		String s1 = new StringBuffer("Hello ")
    		.append("World ")
    		.append("Java ")
    		.append(1.8)
    		.toString();
    最後に.TOString()の貼り付けに伴い、String資料型に変更されます.