[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形式でデータ構造に格納される.
使用
char oneChar = 'a';
String str = "text";
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. インタフェースの利点
このインタフェースを使用すると、複数の継承が可能になるだけでなく、次のような利点があります.
Reference
この問題について([Java]Javaベース(8)), 我々は、より多くの情報をここで見つけました https://velog.io/@minide/Java-자바-기초8テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol