Java内部クラス
1.内部カテゴリとは何ですか?
あるクラスの定義は別のクラス内に配置され、このクラスは内部クラスと呼ばれます
2。内部クラスの特徴は何ですか?
1.インナークラスはまだ独立したクラスです。コンピレーション後、インナークラスは独立したクラスファイルにコンパイルされますが、クラス名と外側クラスのシンボルが前にあります。
2。内部クラスには通常の方法でアクセスできません。内側のクラスは外側クラスのメンバーであるため、内部クラスは、プライベートであろうとなかろうと、外側クラスのメンバー変数に自由にアクセスできます。
3.内部クラスが静的として宣言されている場合、外部クラスのメンバー変数に自由にアクセスできません。この時点で、内部クラスは外部クラスの静的メンバー変数にのみアクセスできます。
3.内部カテゴリは何ですか?
1。メンバー内部クラス
のように:
パッケージcom.test01; public class a {//内部クラスBはtestpojoを継承し、testinterface interface class bを実装しますtestpojoはtestpojoを実装します。 } //インターフェイスメソッドを書き換えますpublic void testf(){system.out.println( "インターフェイスを実装!"); }} //内部クラスのpublic void test(){b b = new b(); b.testf(); // rewriteインターフェイスメソッドb.run()を使用します。 //独自の方法を呼び出しますb.testpojo(); //親クラスを継承するメソッドを呼び出す} a.test(); }} //インターフェイスを定義する、メソッドはtestf()インターフェイスtestinterface {public void testf();} //通常のクラスメソッドtestpojo()class void testpojo(){system.out.println( "i am a simple pojo class"); }} //内部クラスのメソッドを呼び出すように実装{public static void main(string [] args){ab b = new a()。new b(); //クラスA /**の内部クラスBを呼び出すことは、次のコードと同等です* a a = new a(); * ab b = a.new b(); * */ b.testf(); // rewriteインターフェイスメソッドb.run()を使用します。 //独自のメソッドを呼び出すb.testpojo(); //親クラスを継承するメソッドを呼び出す}}2。メソッド内部クラス
パッケージcom.test01; public class pertest {public void test(){//メソッドクラスneを定義する{//メソッド内部クラスpublic void fle(){//メソッド内部クラスsystem.out.println( "I'm Flying!"); }}; new ne()。fle(); //内側クラスのメソッドを呼び出す} public static void main(string [] args){new Pertest()。test(); //テスト}}注:(1)メソッド内部クラスは、内部クラスを定義するメソッド内でのみインスタンス化でき、このメソッドの外側にインスタンス化することはできません。
(2)メソッド内部クラスオブジェクトは、内部クラスが配置されているメソッドの非ファイナルローカル変数を使用できません。
メソッドのローカル変数はスタック上にあるため、メソッドの存続期間中にのみ存在します。メソッドが終了すると、スタック構造が削除されます。
ローカル変数は歴史になります。ただし、メソッドが終了した後、メソッド内で作成された内部クラスオブジェクトはまだヒープに存在する可能性があります!
たとえば、その参照が他のコードに渡され、メンバー変数に保存されている場合。ローカル変数は、メソッド内部クラスオブジェクトと同じ長寿命を持つことを保証できないため、内部クラスオブジェクトはそれらを使用できません。 (この理解はバイドゥ百科事典から来ています)
3。匿名の内部クラス
1)匿名の内部クラスを要約
パッケージcom.anonymous; public class abststractclass {public void test(){//メソッドはテストですa = new testa(){// abstract class @override public void run(){// abstract class system.out.out.println( "abstract Anonymous class"); }}; a.run(); //内側クラスのメソッドを呼び出す} public static void main(string [] args){new AbstractClass()。test(); // test}} //抽象クラスのtesta要約メソッドが実行される()抽象クラスのtesta {public abstract void run();}2)インターフェイス匿名の内部クラス
パッケージcom.anonymous; public class testanonymous {myinterface m = new myinterface(){//インターフェイスpublic void eat(){// myinterface interfaceメソッドsystem.out.println( "私は食事を持っている!"); }}; public void ss(){// method ss m.eat(); //上書き方法を呼び出す} public static void main(string [] args){new testanonymous()。ss(); // test}} //インターフェイスメソッドをeatinterface myinterface {public void eat();}として定義します注:匿名の内部クラスは、メソッド内またはクラスのメンバー内で定義できます。どの匿名の内部クラスがいても、外部クラスで直接呼び出すことはできません。
4.内部カテゴリの役割は何ですか?
各内部クラスは、実装(インターフェイス)から独立して継承できるため、周辺クラスが特定の実装(インターフェイス)を継承したかどうかは、内部クラスに影響を与えません。内部クラスが複数のコンクリートまたは抽象クラスを継承する能力がなければ、いくつかの設計とプログラミングの問題を解決することは困難です。この観点から、内部クラスは複数の継承の解決策を完全にします。
インターフェイスはいくつかの問題を解決し、内部クラスは「多重継承」を効果的に実装します。
読んでくれてありがとう、私はそれがあなたを助けることができることを願っています。このサイトへのご支援ありがとうございます!