まず外観は、Javaオブジェクト指向の三の大機能が含まれます:カプセル化、継承、ポリモーフィズムを。
PS:いくつかは、4つのプロパティを言う、プラス抽象
包装:プロパティの民営化を、プロパティ・メソッドへの外部アクセスを提供する方法を提供することはできません、この機能をカプセル化と呼ばれています。
継承:
- サブクラスは親クラスのオブジェクトのプロパティと(私有財産とプライベートメソッドを含む)すべてのメソッドを持っていますが、私有財産の親クラスとサブクラスは、アクセス可能な、単なる所有権ではありません。
- サブクラスは、サブクラスは親クラスを拡張することができ、自分の属性とメソッドを持つことができます。
- サブクラスは親クラスを達成するためにあなたの方法にすることができ
多型:多型は、基準変数にエンドポイントにおいて、すなわち、決定されていないが、プログラムの実行中にのみ決定されるプログラムで定義された参照変数の特定のタイプを指し向けられ、この方法によって放出される参照変数をプログラミングするときに呼び出されますオブジェクト・クラスのどのインスタンス、最後に作られたこの参照変数のメソッド呼び出しが実行されているプログラムによって決定されるために、実装されたクラスのメソッドです。簡単に言えば、あなたがオブジェクトクラスを作成するときに異なるサブカテゴリーを持つ、複数のサブカテゴリーのクラスで、結果は方法が矛盾している実証され、様々な形態を持つことができます。
今私有財産とプライベートメソッドを含む親クラスのすべての属性とメソッドを、持っているサブクラスに焦点を当てています。
親クラス:
パッケージcom.entity。 / ** * @author Robert_mml * / パブリック クラスBaseUser { 公共BaseUser(文字列名){ この .nameの= 名前。 } 公共BaseUser(文字列名、文字列の年齢){ この .nameの= 名前; この .age = 年齢; } パブリックBaseUser(){ System.out.println( "父类" ); } プライベートBaseUserのgetInstance(){ リターン 新しいBaseUser(); } プライベート文字列名; プライベート文字列の年齢; 公共;のような文字列 パブリック文字列のgetName(){ 戻り名。 } 公共 ボイドのsetName(文字列名){ この .nameの= 名前。 } 公共の文字列getAge(){ 戻り値の年齢。 } 公共 のボイドsetAge(文字列の年齢){ この .age = 年齢; } パブリック文字列getLike(){ リターン等。 } 公共 ボイドsetLike(のような文字列){ この .like = など; } パブリック文字列zToString(){ リターン "BaseUser {" + "名前= '" +名+ '\'' + "年齢= '" +年齢+ '\'' + "のような= '" + +のように '\'' + 「}」。 } }
サブクラス:
パッケージcom.entity。 / ** * @author Robert_mml * / パブリック クラス SYSUSERは拡張BaseUserを{ プライベート文字列名; プライベート文字列の年齢; 公共;のような文字列 公共SYSUSER(文字列名){ スーパー(名); } パブリックSYSUSER(){ System.out.println( "子类" ); } // @Override プライベートSYSUSERのgetInstance(){ 返す 新しい)(SYSUSERを。 } パブリック文字列のgetName(){ 戻り名。 } 公共 ボイドのsetName(文字列名){ この .nameの= 名前。 } 公共の文字列getAge(){ 戻り値の年齢。 } 公共 のボイドsetAge(文字列の年齢){ この .age = 年齢; } @オーバーライド パブリック文字列getLike(){ リターン等。 } @オーバーライド 公共 ボイドsetLike(のような文字列){ この .like = など; } パブリック文字列getSuperLike(){ リターン スーパー.getLike()。 } 公共 のボイドsetSuperLike(のような文字列){ スーパー.setLike(のような); } パブリック文字列zToString(){ 戻り "SYSUSER {" + "名前= '" +名+ '\'' + "年齢= '" +年齢+ '\'' + 」など= '」+ +のような '}' + "BaseUser {" + スーパー .zToString()+ '\'」+ '}' + "BaseUser {" + スーパー .toString()+ '\'」+ 「}」。 } }
サブクラスは親クラスの私有財産を発見した、サブクラスはすでにこれらのプライベート性質そのものであってもよいです。そして、競合は表示されません。プライベートメソッド@Override同じサブクラスの識別が与えられますとき。
それはそうこれらのことから、サブクラスは親クラスの私有財産を持っていないようです。
情報によると、サブクラスが作成され、それは親オブジェクトを作成し、親オブジェクト外層はサブクラスで、サブクラスは、外側層に独自の方法サブクラスは、親クラスを含みます。
公共財産の親クラスとサブクラスは、同じ名前を持つ場合には、ロゴは、まだ@Overrideエラーを使用し、あなたは、親クラスとサブクラスを推測することができ、プロパティが異なるメモリ空間です。
メイン:
パッケージcom.entity。 パブリック クラスメイン{ パブリック 静的 ボイドメイン(文字列[]引数){ SYSUSER SYSUSERは = 新しいSYSUSERを(); sysUser.setLike( "卓球" ); sysUser.setSuperLike( "バドミントン" )。 System.out.println(sysUser.toString())。 System.out.println(sysUser.zToString())。 } }
結果:
親 サブクラス com.entity.SysUser@7cd84586 {名前SYSUSER = 'NULL'、年齢= 'NULL'、= 'ピンポンBaseUser {BaseUser {名} ='のようなヌル '年齢=' NULLバドミントン'=ような、' '}'} BaseUser {com.entity。 SYSUSER @ 7cd84586「}
図から分かるように、親クラスのメモリ空間は、サブクラスです。
説明は、初期化時に親は、サブクラスのメモリ空間を初期化されますが、実際の例を作成していないが、サブクラスのプロパティは現在、親クラスから分離されています。
PS:引数なしで親クラスのコンストラクタは、リファレンスコンストラクタは、サブクラスが実装しなければならない同じ参照コンストラクタがエラーを実装していないときにのみ保持、削除。
親クラスは複数のコンストラクタを持っている場合には、一つのサブクラスだけで達成する必要があります。
Javaのサブクラスで継承親クラスのメモリ割り当てを説明します:
https://blog.csdn.net/smithdoudou88/article/details/12756187