継承
1.javaの継承
1-1. 継承
オブジェクト向けプログラミングの基本思想の一つは,オブジェクト間の関係を確立する方法である.
従来の方法では、既存のクラスから属性とアクションを継承して新しいクラスを作成し、オブジェクト間の関係を設定し、コードの重複を最小限に抑えることができます.
次に、クラス間関係を表すときによく使われるクラス図を示します.SUVとSEDANクラスはCarクラスのすべての属性と動作を持ち,新しい属性と動作を持つ.
class Car {
var mSpeed;
void accelerate(float value) {...}
void break(float value) {...}
}
class SUV extends Car {
boolean misOffRoadMode;
void setOffRoadMode(boolean mode) {...}
boolean isOffRoadMode() {...}
}
class SEDAN extends Car {
int mDrivingMode;
void setDrivingMode(int mode) {...}
}
1-2. Java継承フィーチャー
extends定語による継承
マルチクラス継承はサポートされていません
親の作成者は継承しません
変数またはメソッドにprivateアクセス指定子がある場合、変数は継承されますが、すぐにアクセスできません.メソッドは継承されません.
静的変数とメソッドも継承されます
Objectクラスは最上位クラスであり、Objectクラスのみ親クラスを持つことはできません.
2.スーパーキー
super:親への参照変数
super.変数またはsuper.method()のように親クラスのメンバーにアクセスできます
super()は親クラスのジェネレータを呼び出します.コンストラクション関数で使用するには、this()のようにコンストラクション関数の最初の行に作成する必要があります.
// 오류 발생
class Parent {
int a;
Parent(int n) { a = n; }
}
class Child extends Parent {
int b;
Child() {
super();
b = 20;
}
// 정상 작동
class Parent {
int a;
Parent() { a = 10; }
Parent(int n) { a = n; }
}
class Child extends Parent {
int b;
Child() {
super();
b = 20;
}
3.メソッドオーバーフロー
OOPの多形性を実現する1つの方法は、サブクラスで同じ記号の同じ方法を再定義して異なるようにすることである
3-1. 上書き条件
メソッドの宣言部分は、既存のメソッドと完全に同じである必要があります.メソッドの戻りタイプが親の戻りタイプに変換できる場合は、変更できます.
親メソッドの範囲より小さいアクセス制御者に変更できません.
親メソッドよりも広い範囲の例外は宣言できません
3-2. Javaの上書き
class Parent {
void smth() {...}
}
class Child {
@Override
void smth() {...}
}
@Override
のプレゼンテーションでは、親クラスを上書きするメソッドをコンパイラに伝えます.コメントを追加する必要はありませんが、コンパイル時間の検証とエラーの確認を可読性の面で行うことが望ましいです.4.動的方法の派遣
オーバーライド+アップリンクによる実行時間異機種化
class Car {
void printType() {
System.out.println("자동차");
}
}
class SEDAN extends Car {
@Override
void printType() {
System.out.println("세단");
}
}
class SUV extedns Car {
@Override
void printType() {
System.out.println("SUV");
}
}
public class Main {
public static void main(String[] args) {
Car ref = new Car();
ref.printType // 자동차
// 업캐스팅
ref = new SEDAN();
ref.printType // 세단
// 업캐스팅
ref = new SUV();
ref.printType // SUV
}
}
動的メソッド派遣が重要なのは、クライアント-->サーバ依存のクライアントクラスの再利用性を向上させるためです.非クラスインタフェースを使用するため、再利用性を向上させることができ、これもList<Integer> list = new ArrayList<Integer>();
のようにインタフェース参照変数を頻繁に使用する理由である.5.ダブル派遣
6.抽象クラス
1つ以上の抽象メソッドを持つクラス
クラスの設計図
1つ以上の抽象メソッドを持つクラス
クラスの設計図
6-1. 抽象クラスの用途
abstract class Calculator {
public abstract int add(int a, int b);
public abstract int subtract(int a, int b);
public abstract double average(int[] a);
}
public class GoodCalc extends Calculator {
@Override
public int add(int a, int b) {
return a + b;
}
@Override
public int subtract(int a, int b) {
return a - b;
}
@Override
public double average(int[] a) {
double sum = 0;
for (int i = 0; i <a.length; i++)
sum += a[i];
return sum/a.length;
}
}
クラス構造実現abstract class Animal {
abstract void sound();
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("멍멍");
}
}
class Cat extends Animal {
@Override
void sound() {
System.out.println("야옹");
}
}
7.finalキーワード
7-1. finalクラス
生成
final class FinalClass {
...
}
class SubClass extends FinalClass { // 컴파일 오류
...
}
7-2. 最終メソッド
class SuperClass {
final int finalMethod() {...}
}
class SubClass extends Superclass {
@Override // 컴파일 오류
int finalMethod() {...}
}
7-3. finalフィールド
class SharedClass {
final double PI = 3.14;
}
8.対象クラス
親以外の最上位レベル
8-1. toString
class Dog {
@Override
public String toString() {
return "Dog 객체" + '@' + Integer.toHexString(hashCode());
}
}
8-2. clone
8-3. equals
オブジェクト値
==
で比較するだけで、それらが同じオブジェクトであるか否かを判断することができるので、値を比較するためにequalsメソッドを使用する必要がある.class Student {
String name;
Student (String name) {
this.name = name;
}
@Override
public boolean equals(Object obj) {
Student _obj = (Student)obj;
return name == _obj.name;
}
}
Reference
この問題について(継承), 我々は、より多くの情報をここで見つけました https://velog.io/@sangmin7648/상속テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol