0
点赞
收藏
分享

微信扫一扫

内部类 - Java


文章目录

  • ​​一、内部类的多种形式​​
  • ​​二、成员内部类​​
  • ​​三、局部内部类​​
  • ​​四、匿名内部类​​
  • ​​五、内部类的调用方式总结​​

一、内部类的多种形式

  • 静态内部类, ​​static class StaticInnerClass{ };​
  • 成员内部类, ​​private class InstanceInnerClass{ };​
  • 局部内部类, 定义在方法或表达式内部
  • 匿名内部类, ​​(new Thread() { }).start​

package top.clearlight.book.efficientcode.insideclass;

public class InnerClassTest1 {

// 成员内部类
private class InstanceInnerClass {

}

// 静态内部类
static class StaticInnerClass {

}

static int a = 1;

public static void main(String[] args) {
// 两个匿名内部类
(new Thread() {}).start();
(new Thread() {}).start();

// 两个方法内部类
class MethodClass {
}
class MethodClass2 {
}
}
}

源出处 : < Easy Coding >

二、成员内部类

将一个类直接定义在类的里面, 作为类中成员, 与属性或方法层次一致

  1. 内部类既可以访问自身的数据域,也可以访问创建它的外围类对象的数据域(包括私有的)
  2. 正常类的修饰符可以为​​public或default​​, 成员内部类可以使用不同的修饰符来修饰.
  3. 内部类与外部类出现相同的变量名,想要引用外部类的域 -> ​​外部类.this.外部成员​​​. (其中 ​​OuterClass.this​​表示外围类的引用
  4. 内部类中声明的所有静态域必须用​​final​​修饰.
  5. 内部类不能有static方法
  6. 源码进行编译后,产生一个字节码:​​外部类$内部类.class​

三、局部内部类

将一个类定义在方法/块里面,作为方法的内部结构,与临时的局部变量一个层次

  1. 局部类不能用public或private访问符声明.只能用abstract或final修饰.
  2. 局部类可以对外部完全隐藏,只有方法之外的代码,都不能访问它. 因此需要在内部类里面完成对象的定义和引用.
  3. 局部内部类访问外部类的成员使用 : ​​外部类名.this.成员名​​.
  4. 从内部类引用本地变量必须用​​final​​修饰或者实际上的最终变量. 内部类访问的局部变量必须事实上为final,一旦赋值就绝对不会改变!

public void testDemo() {
System.out.println("这是外部类中的方法");
int b = 1;
// 定义一个局部内部类
class LocalClass {
private String name;
int aa = 1;
public void test1() {
aa++;
// 报错,因为调用的本地变量jdk8默认添加了final修饰符不可变
// b++;
}
public void test() {
System.out.println(InnerClassTest.this.name);
}
}
LocalClass lc = new LocalClass();
lc.test();
lc.test1();
}

public void testDemo() {
System.out.println("这是外部类中的方法");
int b = 1;
System.out.println(++b); // 此处做了自增,因此变量b不会默认添加final修饰符
// 定义一个局部内部类
class LocalClass {
private String name;
int aa = 1;
public void test1() {
aa++;

System.out.println(b); // 报错, 因为局部内部类访问方法内的变量,需要使用final修饰.
}
}

LocalClass lc = new LocalClass();
lc.test1();
System.out.println(lc.aa);
}

内部类 - Java_匿名内部类

四、匿名内部类

  1. 格式 : new 抽象类|接口(构造参数) {
       实现的抽象方法 或 重写方法;
    };
  2. 如果抽象类被使用一次,可以使用匿名内部类创建该类实例实现抽象方法,但是多次使用,建议重新定义类!
  3. 使用匿名内部类时,我们必须是继承一个类或者实现一个接口,但是两者不可兼得,同时也只能继承一个类或者实现一个接口。
  4. 匿名内部类中是不能定义构造函数的。
  5. 匿名内部类中不能存在任何的静态成员变量和静态方法。
  6. 匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效。
  7. 匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。

3 - 7 引用优秀博客第二篇

优秀博客 :

​​java中匿名内部类总结​​
java提高篇(十)-----详解匿名内部类

五、内部类的调用方式总结

优秀博客 :

​Java中的内部类总结​​


举报

相关推荐

0 条评论