1.内部クラスの概念
-
内部クラスとは何ですか?
他のクラスの内側に書かれたクラスは、内部クラスのカテゴリの内部と呼ばれ、他のクラスに書き込み、他のクラスのメンバーと位置のローカル位置に書き込むことができる(ビルトインクラス、ネストされたクラス)、外部の他のタイプと称されるクラス。
-
内部クラスを使用する場合は?
内部物質は、さらに他のものが含まれていてもよい含む場合、自動車の説明では、例えば、物事を説明では、自動車はさらに、内燃機関がクラスを記述するために使用することができ、エンジンを含みます。
-
内部分類のどのような?
内部クラスのメンバー、ローカル内部クラス、匿名内部クラスと静的内部クラス:内部は、カテゴリに分け。
-
コンパイルは内部クラスが特徴?
OuterClass.classとOuterClass $ InnerClass.class:内部および外部のクラスOuterClassと呼ばれるクラスの場合は、InnerClassと呼ばれ、コンパイルが成功した後、その2つのクラスファイルが存在します。
-
特長は、内部クラスにアクセスしますか?
インナークラスが直接内部クラスにアクセスするために、外部のクラスをクラスの外部メンバーにアクセスすることができます、あなたは内部クラスオブジェクトを確立する必要があります。
内部クラスの2メンバー
内部クラスのメンバーは、メンバーはクラス外の位置を定義します。クラスのメンバ変数が類似しているが、外部オブジェクトを介してアクセスすることができます。
- 定義フォーマット
class 外部类 {
修饰符 class 内部类 {
// 其它代码
}
}
[例]インナークラスコードのメンバーが実証します
// 外部类
class OuterClass {
// 成员内部类
public class InnerClass {
// 成员内部类的成员变量
String name;
// 成员内部类的构造方法
public InnerClass() {} // 无参构造方法
public InnerClass(String name) { // 有参构造方法
this.name = name;
}
// 成员内部类的成员方法
public void test() {
System.out.println("innerClass test()");
}
}
// 外部类成员方法
public void show() {
// 实例化成员内部类
InnerClass in = new InnerClass("小明");
// 获取成员内内部类的属性
System.out.println(in.name); // 输出:小明
// 调用成员内内部类的方法
in.test();
}
}
// 测试类
public class InnerClassDemo {
public static void main(String[] args) {
new OuterClass().show();
}
}
- インナークラスのアクセス方法
外部変数名内の外部名のクラスのクラス名=新しいクラス名(引数リスト).new内部名クラス(引数リスト);
[例]インナークラスのアクセスコードは、方法を示し
// 外部类
class OuterClass {
String sex = "娜娜";
// 成员内部类
public class InnerClass {
// 成员内部类的成员变量
String name;
// 成员内部类的构造方法
public InnerClass() {} // 无参构造方法
public InnerClass(String name) { // 有参构造方法
this.name = name;
}
// 成员内部类的成员方法
public void test() {
System.out.println("innerClass test()");
}
}
}
// 测试类
public class InnerClassDemo {
public static void main(String[] args) {
/*
* 实例化内部类完整写法
* OuterClass outer = new OuterClass();
* OuterClass.InnerClass in = outer.new InnerClass();
*/
OuterClass.InnerClass in = new OuterClass().new InnerClass("小明");
// 获取成员内内部类的属性
System.out.println(in.name); // 输出:小明
// 调用成员内内部类的方法
in.test();
}
}
- 内部クラス上の注意のメンバー
-
外側のクラスメンバーのstaticメソッドは内部変数にアクセスすることはできません。
-
任意の静的変数と静的メソッドは内部クラスのメンバーを存在することはできません。
-
内部クラスのメンバーは、これだけ内周クラスを作成することができるようにクラスを作成し、クラスの周囲に取り付けられています。
-
アクセス外部メソッドへの外部.thisクラスのメンバ変数、クラスのメンバー:外部アクセスクラスのメンバ変数.. .This外クラスのメンバメソッド。
[例]インナークラスコードのメンバーは、注意事項を示し
// 外部类
class OuterClass {
String name = "娜娜";
// 成员内部类
public class InnerClass {
// 成员内部类的成员变量
String name;
// 成员内部类的构造方法
public InnerClass() {} // 无参构造方法
public InnerClass(String name) { // 有参构造方法
this.name = name;
}
// 成员内部类的成员方法
public void show(String name) {
// 局部变量,成员内部类成员变量,外部类成员变量同名时的访问
System.out.println("局部变量:" + name);
System.out.println("成员内部类成员变量:" + this.name);
System.out.println("外部类成员变量:" + OuterClass.this.name);
}
// 2、成员内部类中不能存在任何的静态变量和静态方法。
// static String company = "北京尚学堂"; 编译错误
// public static test() {} 编译错误
}
// 外部类的静态方法
public static void show() {
// 1、外部类的静态方法中不能访问成员内部变量。
// InnerClass in = new InnerClass(); 编译错误
}
}
// 测试类
public class InnerClassDemo {
public static void main(String[] args) {
OuterClass.InnerClass in = new OuterClass().new InnerClass("小明");
// 获取成员内内部类的属性
System.out.println(in.name); // 输出:小花
// 调用成员内内部类的方法
in.show("小花");
}
}
3.ローカル内部クラス
クラスメソッド外部局所位置を定義する内部ローカルクラス。そして方法と同様の方法でローカル変数にアクセスすることは、呼び出しによってアクセスすることができます
- 定義フォーマット
class 外部类 {
修饰符 返回值类型 方法名(参数列表) {
class 内部类 {
// 其他代码
}
}
}
[例]部分内部クラスコードが実証します
// 外部类
class OuterClass {
// 外部类的方法
public void test() {
// 局部内部类
class InnerClass {
// 局部内部类的成员变量
public String name;
// 局部内部类的构造方法
public InnerClass() {} // 无参构造方法
public InnerClass(String name) { // 有参构造方法
this.name = name;
}
// 局部内部类的成员方法
public void show() {
System.out.println("局部内部类中的show方法");
}
}
// 实例化局部内部类,注意只能在对应的局部作用域中实例化!!!
InnerClass in = new InnerClass("小明");
// 获取局部内部类中的成员变量
System.out.println("name:" + in.name);
// 调用局部内部类中的成员方法
in.show();
}
}
- 注意事項一部の内部クラス
-
部分的な内部クラスには、対応するローカルスコープ内でインスタンス化することができます。
-
任意の静的変数と内部メソッドは、ローカルクラス内に存在することはできません。
-
ローカルインナークラスは、これだけ内周クラスを作成することができるようにクラスを作成し、クラスの周囲に取り付けられています。
-
アクセス外部メソッドへの外部.thisクラスのメンバ変数、クラスのメンバー:外部アクセスクラスのメンバ変数.. .This外クラスのメンバメソッド。
-
最後の訪問と外部ローカル変数ローカル内部クラスは、ローカル変数外の変更を防止するように変更する必要があります。JDK1.8の後には、最終的に追加する必要はありません。
[例]部分インナークラスコードは、注意事項を示し
// 外部类
class OuterClass {
String name = "娜娜";
// 外部类的方法
public void test() {
// 4.如果局部内部类要访问外部局部变量,那么需要用final来修饰该外部局部变量。
final int num = 18; // JDK1.8之后可以省略final
// 局部内部类
class InnerClass {
// 局部内部类的成员变量
public String name;
// 局部内部类的构造方法
public InnerClass() {} // 无参构造方法
public InnerClass(String name) { // 有参构造方法
this.name = name;
}
// 局部内部类的成员方法
public void show(String name) {
// 3.局部变量,局部内部类成员变量,外部类成员变量同名时的访问
System.out.println("局部变量:" + name);
System.out.println("成员内部类成员变量:" + this.name);
System.out.println("外部类成员变量:" + OuterClass.this.name);
// 访问外部局部变量
System.out.println("外部局部变量:" + num);
}
// 2、成员内部类中不能存在任何的静态变量和静态方法。
// static String company = "北京尚学堂"; 编译错误
// public static test() {} 编译错误
}
// 1、局部内部类只能在对应的局部作用域中实例化。
InnerClass in = new InnerClass("小明");
// 获取局部内部类中的成员变量
System.out.println("name:" + in.name);
// 调用局部内部类中的成员方法
in.show("小花");
}
}
// 测试类
public class InnerClassDemo2 {
public static void main(String[] args) {
new OuterClass().test();
}
}
4.匿名内部クラス
匿名内部クラスは、ローカル内部クラスで、何の内部クラス名ではありません。
匿名内部クラスを使用すると、親クラスを継承するか、インタフェースを実装する必要があることを提供し、それはサブクラスオブジェクトのタイプへのショートカットを作成することです。
- 定義フォーマット
class 外部类 {
public 返回值类型 方法名(参数列表) {
new 接口() | 父类构造器(参数列表) {
// 其他代码
}
}
}
[例]匿名内部クラスのケースを使用していません
// 父类或一个接口,用于局部内部类继承或实现
abstract class Parent {
abstract void show1();
abstract void show2();
}
// 外部类
class OuterClass {
public void test() {
// 局部内部类
class InnerClass extends Parent {
@Override
void show1() {
System.out.println("内部类中的show1方法");
}
@Override
void show2() {
System.out.println("内部类中的show2方法");
}
}
// 局部内部类实例化。
InnerClass in = new InnerClass();
in.show1();
in.show2();
}
}
匿名の使用は、本実施形態と、2つの主要なステップは、フォーマットによって実行サブクラスオブジェクトを作成する(継承親クラスまたはインタフェースを実装するなど)が定義サブクラスオブジェクト。二つのステップが、しかし、両方のステップが一緒に達成されます。
[例]匿名内部クラスの使用事例
// 父类或一个接口,用于匿名内部类继承或实现
abstract class Parent {
abstract void show1();
abstract void show2();
}
// 外部类
class OuterClass {
public void test() {
// 匿名内部类
Parent p = new Parent() {
@Override
void show1() {
System.out.println("匿名内部类中的show1方法");
}
@Override
void show2() {
System.out.println("匿名内部类中的show2方法");
}
};
p.show1();
p.show2();
}
}
匿名内部クラスは、変数の参照、また、匿名のオブジェクトを定義しない場合。
- 匿名内部クラス上のご注意
-
匿名内部クラスは、ローカル内部クラスとして、そのすべてのローカル内部の制限は匿名内部クラスの同じ種類に有効になります。
-
匿名の内部クラス、コンストラクタ内の構成ブロックによる初期化が完了したことを定義されていません。
-
匿名内部クラスは慎重に使用することに不便として、独自のメンバ変数とメンバメソッドを追加します!
静的な内部クラス
キーワードは、静的メンバ変数、メソッド、コードブロック、静的な内部クラスはまた、我々は静的な内部クラスを呼び出す修正静的な内部クラスを使用して変更することができますを変更することができます。
[例]静的内部クラスケース
// 外部类
class OuterClass {
// 静态内部类,用static来修饰
public static class InnerClass {
// 静态内部类的成员变量
String name;
// 静态内部类的构造方法
public InnerClass() {} // 无参构造方法
public InnerClass(String name) { // 有参构造方法
this.name = name;
}
// 静态内部类的成员方法
public void show() {
System.out.println("静态内部类的show方法");
}
}
// 外部类静态方法
public static void test() {
// 初始化静态内部类
InnerClass inner = new InnerClass("小明");
// 获取静态内部类中的成员变量
System.out.println("name:" + inner.name);
// 调用静态内部类中的成员方法
inner.show();
}
}
- 静的クラスのアクセス方法
外部静的内部クラス名クラス名変数名=新しいクラス名、外部staticな内部クラス名(パラメータリスト);
[例]静的クラスアクセスコードが方法を示して
// 外部类
class OuterClass {
// 静态内部类,用static来修饰
public static class InnerClass {
// 静态内部类的成员变量
String name;
// 静态内部类的构造方法
public InnerClass() {} // 无参构造方法
public InnerClass(String name) { // 有参构造方法
this.name = name;
}
// 静态内部类的成员方法
public void show() {
System.out.println("静态内部类的show方法");
}
}
}
// 测试类
public class InnerClassDemo4 {
public static void main(String[] args) {
// 创建静态内部类
OuterClass.InnerClass inner = new OuterClass.InnerClass("小明");
// 获取静态内部类中的成员变量
System.out.println("name:" + inner.name);
// 调用静态内部类中的成员方法
inner.show();
}
}
- 静的な内部クラス上のご注意
-
静的な内部クラスを作成し、外部のクラスに依存する必要はありません。
-
静的内部クラスは、外部クラスの非静的メンバ変数とメソッドを使用することはできません。
-
内部クラスは、静的メンバを定義している場合、次に内部クラスは、静的でなければならないこと。
- コール静的内部クラスの静的変数と静的メソッドであります
-
静的変数を呼び出します。
OuterClass.InnerClass.staticVariable
-
静的メソッドを呼び出します。
OuterClass.InnerClass.staticFunction();
PS:最新の無料のマニュアルと教育ビデオの場合は、QQグループ(627407545)を追加してください受けます。