UM2L10——内部类
UM2L10——内部类
内部类
Java中的内部类和C#中区别较大,在使用时一定要注意他们的区别之处
- Java中的内部类在外部使用时必须伴随包裹它的外部类的出现而出现
- 外部类中的所有内容(包括私有)都可以直接在内部类中使用
- 内部类和外部类中的同名成员,通过
this
和外部类.this
来区分
匿名类使用较少,主要做了解,能看懂即可
Java中的内部类的使用
注意:Java中的内部类的使用和C#有很大的不同
-
Java中的内部类在外部使用时必须伴随包裹它的外部类的出现而出现,声明语法为:
1
2外部类 outer = new 外部类();
外部类.内部类 inner = outer.new 内部类();也就是说,在外部使用非静态的内部类,必须要先实例化一个外部类对象,再通过这个外部类对象实例化内部类,实际例子:
1
2Outer outer = new Outer();
Outer.Inner inner = outer.new Inner(); -
外部类中的所有内容(包括私有)都可以直接在内部类中使用
因为内部类是基于外部类实例化的,因此是可以使用外部类对象的成员
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19// 外部类
public class Outer {
private int i = 1;
public String str = "123";
public Inner i1 = new Inner();
//在一个类里声明的类,一般成为内部类
public class Inner {
public void test() {
System.out.println(i);
System.out.println(str);
i = 10;
str = "唐老狮";
System.out.println(i);
System.out.println(str);
}
}
}1
2
3
4
5
6
7public class Lesson13 {
public static void main(String[] args) {
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
inner.test();
}
}输出:
1
2
3
41
123
10
唐老狮 -
内部类和外部类中的同名成员,通过
this
和外部类.this
来区分1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19// 外部类
public class Outer {
private int i = 1;
public String str = "123";
public Inner i1 = new Inner();
//在一个类里声明的类,一般成为内部类
public class Inner {
public int i = 2;
public void test() {
int i = 3;
System.out.println(i);
System.out.println(this.i);
System.out.println(Outer.this.i);
}
}
}输出:
1
2
33
2
1
匿名内部类
匿名内部类,在声明一个类对象时临时拓展该对象,可以重写方法,但是拓展的内容一般是基于外部类的
常用于重写方法,或者重新声明已有内容,在匿名内部类拓展的新成员变量和成员方法都是不能在外部直接 .
出来用的
可以配合抽象类使用,用于临时实例化一个类似于继承并重写方法的对象
注意:
- 不能写构造方法
- 不能定义静态成员
- 一般基于外部类已有方法实现内容
- 如果匿名类创建的对象不记录,用完一次后会马上被销毁
1 | // 外部类 |
1 | public class Lesson13 { |
输出:
1 | 吃东西 |
配合抽象类使用:
1 | public abstract class TestTest { |
1 | public class Lesson13 { |
输出:
1 | 111 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 文KRIFE齐的博客!