[Java]Javaベース(8)


[Java]Javaベース(8)


1.文字と文字列


1-1. テキスト


1つの文字値に対して、データ型はcharを使用します.
文字を入力するときに引用符("")を使用します.
char oneChar = 'a';

1-2. 文字列


文字列の場合、データ型はStringを使用します.
文字列を入力するときに引用符("")を使用します.
文字の後ろには0(空の文字)はありませんが、文字列の末尾には=(空の文字)が格納されます.

Stringクラス


文字列入力を受信するStringは、元のタイプのように書き込みまたは参照されるオブジェクトクラスです.同時に、同一オブジェクトは不変オブジェクトとして共有される.
Stringクラスの宣言方法
1.自然
String str = "text";
""使用する割当て方式内部は、スタックメモリのString定数poolに格納され、hashmap形式でデータ構造に格納される.
使用
  • newの宣言
  • String str = new String("text");
    newの文字列を使用して、スタックメモリにオブジェクト形式で格納します.

    次の例では、2つのストレージ方式の違いについて説明します.
    String str = "text";
    String str2 = "text2";
    String str3 = new String("text3");
    
    System.out.println(str == str3); // false
    System.out.println(str == str2); // true

    2.上選角と下選角


    2-1. いわゆる「鋳造」(Casting)


    鋳造はタイプ変換であり、タイプ変換とも呼ばれる.Java継承関係では、親と子の間で相互に変換できます.
    親継承関係の親はスーパークラス、子は子クラスとして定義されます.

    2-2. アップリンク


    Upcasting(Upcasting)とは、サブクラス内のオブジェクトがスーパークラスに変換されるタイプを指す.
    すなわち、スーパークラス参照変数は、サブクラスにオブジェクト化されたインスタンスを指すことができる.
    Javaでは、サブクラスはスーパークラスのすべての特性を継承します.

    2-3. 下り鋳造


    DownCasting(DownCasting)とは、自身の固有の特性を失ったサブクラスのオブジェクトを再復元することです.
    つまり、選ばれたコンテンツを元の状態に戻す.
    上の選択角とは異なり、タイプを明確に指定する必要があります.また、角選びは先行します.
    変形アクティブ化ターゲットは、次の選択で指定されていますが、コンパイル時にエラーが発生しなくても、実行時にエラーが発生する可能性があります.

    3.インタフェース


    3-1. インタフェースバー


    インタフェース(Interface)は、他のクラスを作成する際に基本的なフレームワークを提供し、他のクラス間で中間メディアの役割を果たす抽象クラスです.
    Javaでは、抽象クラスには抽象メソッドだけでなく、ジェネレータ、フィールド、および一般メソッドも含まれます.

    3-2. インタフェース宣言


    Javaでインタフェースを宣言する方法は、クラスを作成する方法と同じです.
    インタフェースを宣言するときに、アクセス指定子とともにインタフェースキーを使用できます.
    접근지정자 interface 인터페이스이름 {
    	public static final 타입 상수명 =;
        	...
        	public abstract 메소드이름(매개변수목록);
            ...
    ただし、クラスと異なり、インタフェースのすべてのフィールドはpublic static final、すべてのメソッドはpublic abstractでなければなりません.
    このセクションはすべてのインタフェースの共通のセクションであるため、このアクセス指定子は省略できます.
    このように省略されたアクセス指定子は、コンパイル時にJavaコンパイラによって自動的に追加されます.

    3-3. インタフェース実装


    抽象クラスと同様に、インタフェースは自分でインスタンスを作成できません.
    したがって,インタフェースに含まれる抽象的なメソッドを実現できるクラスを記述する必要がある.
    Javaでは、インタフェースは次の構文で実装されます.
    class 클래스이름 implements 인터페이스이름 { ... }
    すべての抽象メソッドが実装されていない場合は、abstractキーワード宣言を抽象クラスとして使用します.

    3-4. クラスを使用して複数の継承を行う問題


    クラスを多重継承すると、メソッドのソースがぼやけてしまうなどの問題があります.
    class Animal { 
        public void cry() {
            System.out.println("짖기!");
        }
    }
     
    class Cat extends Animal {
        public void cry() {
            System.out.println("냐옹냐옹!");
        }
    }
     
    class Dog extends Animal {
        public void cry() {
            System.out.println("멍멍!");
        }
    }class MyPet extends Cat, Dog {}
     
    public class Polymorphism {
        public static void main(String[] args) {
            MyPet p = new MyPet();
    ②      p.cry();
        }
    }
    上記の例では、CatクラスとDogクラスはそれぞれ、cry()メソッドを上書きするためにAnimalクラスを継承する.
    ここまでは問題ありませんが、①第一線でMyPetクラスがCatクラスとDogクラスを同時に継承すると問題が発生します.
    ②MyPetインスタンスpがcry()メソッドを呼び出すと、このメソッドはCatクラスで継承されたcry()メソッドかDogクラスで継承されたcry()メソッドかの間で区別できない曖昧性を生じる.
    したがって、Javaではクラスのマルチ継承はサポートされていません.
    しかし,インタフェースを用いて複数の継承を行うと,上述した方法呼び出しの曖昧性を防止することができる.
    interface Animal { public abstract void cry(); }
     
    interface Cat extends Animal { public abstract void cry(); }
    interface Dog extends Animal { public abstract void cry(); }
     
    class MyPet implements Cat, Dog {
        public void cry() {
            System.out.println("멍멍! 냐옹냐옹!");
        }
    }
     
    public class Polymorphism05 {
        public static void main(String[] args) {
            MyPet p = new MyPet();
            p.cry();
        }
    }
    上記の例では、CatインタフェースとDogインタフェースを同時に実装するMyPetクラスでのみcry()メソッドを定義しているので、前述の例ではメソッド呼び出しの曖昧性はない.

    3-5. インタフェースの利点


    このインタフェースを使用すると、複数の継承が可能になるだけでなく、次のような利点があります.
  • 大規模プロジェクト開発の場合、一貫した、定型化された開発のための標準化が可能である.
  • クラスの作成とインタフェースの実装を同時に行うことができるため、開発時間を短縮することができる.
  • インタフェースを介してクラスとクラスの関係を接続し、各クラスは独立してプログラミングできる.