0
点赞
收藏
分享

微信扫一扫

类的内部成员之五:内部类

类的内部成员之五:内部类

内部类:把类定义在其他类的内部

内部类特点:

A:内部类可以直接访问外部类的成员,包括私有

B:外部类要访问内部类的成员,必须创建对象

内部类的位置

​ 成员位置:定义在成员位置的类,称为成员内部类

​ 局部位置:定义在局部位置的类,称为局部内部类

格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象

举例

class Outer {
	private int s;
	public class Inner {
		public void mb() {
		s = 100;
		System.out.println("在内部类Inner中s=" + s);
	}
}
public void ma() {
	Inner i = new Inner();
	i.mb();
	}
}
public class InnerTest {
	public static void main(String args[]) {
	Outer o = new Outer();
	o.ma();
	}
}

public class Outer {
	private int s = 111;
	public class Inner {
	private int s = 222;
	public void mb(int s) {
		System.out.println(s); // 局部变量s
		System.out.println(this.s); // 内部类对象的属性s
		System.out.println(Outer.this.s); // 外部类对象属性s
	}
}
public static void main(String args[]) {
	Outer a = new Outer();
	Outer.Inner b = a.new Inner();
	b.mb(333);
	}
}

局部内部类访问局部变量必须用final 修饰 ?

局部变量会随方法结束而消失,但对象可能还需要使用这个变量,堆内存不会因此而消失

匿名内部类

​ 就是内部类的简化写法

前提:存在一个类或者接口

格式:new 类名或者接口名(){

​ 重写方法;

}

本质:是一个继承了该类或者实现了该接口的子类匿名对象

举例

interface A{
	public abstract void fun1();
}
public class Outer{
	public static void main(String[] args) {
	new Outer().callInner(new A(){
//接口是不能new但此处比较特殊是子类对象实现接口,只不过没有为对象取名
	public void fun1() {
	System.out.println(“implement for fun1");
		}
	});// 两步写成一步了
}
public void callInner(A a) {
	a.fun1();
	}
}
举报

相关推荐

0 条评论