内部类概述

对于每个内部类来说:Java编译器会生成独立.class文件

成员内部类:外部类名$内部类名字

局部内部类:外部类名$数字内部类名称

匿名内部类:外部类名$数字

内部类根据使用不同的修饰符或者定位的位置不同,分成四类

四种内部类

1.实例内部类:内部类没有使用static类

2静态内部类:内部类使用了static修饰

3局部内部类:在方法中定义的内部类

4匿名内部类适用于仅适用一次使用的类,属于局部内部类的特殊情况


外部类的访问修饰符,要么使用public,要么就缺省

内部类看做是外部类的一个成员,好比字段,那么内部类可以使用public/缺省/protected/private修饰,还可以是static修饰


实例内部类

没有使用static修饰内部类,说明内部类属于外部类的对象,不属于外部类本身

特点:

创建实例内部类前,必须存在外部类对象,通过外部类对象创建内部类对象(当存在内部类对象是,一定存在外部类对象)

实例内部类的实例自动持有外部类的实例的引用 内部类可以直接访问外部类成员

外部类中不能直接访问内部类的成员,必须通过内部类的实例去访问

实例内部类中不能定义静态成员,只能定义实例成员

如果实例内部类和外部类存在同名的字段或方法abc,那么在内部类中,this.abc表示访问内部类成员,外部类this.abc表示访问外部类成员

package com.swing;

import java.awt.Color;
import java.awt.Container;

import javax.swing.JFrame;

import com.swing.Outter.Inner;

class Outter
{
	String name="Outter.name";
	public void getAge()
	{
		//System.out.println(age);外部类中不能直接访问内部类的成员
		System.out.println(this.new Inner().age);
	}
	class Inner
	{
//      实例内部类中不能定义静态成员,只能定义实例成员
//		static int width;
//		static int getHeight()
//		{
//			
//		}
		
		String name="Inner.name";
		int age =17;
		public void getName()
		{
			
			System.out.println(name);//Inner.name 隐藏
			System.out.println(this.name);//Inner.name 隐藏
			System.out.println(Outter.this.name);//Outter.name
		}
	}
}
public class Example10_1 {
	public static void main(String[] args) {
		Outter out = new Outter();
		//创建实例内部类前,必须存在外部类对象,通过外部类对象创建内部类对象
		Outter.Inner in=out.new Inner();
		//内部类可以直接访问外部类成员
		in.getName();
		//外部类方法要访问内部成员的字段 
		out.getAge();
	}

}

静态内部类:

使用static修饰的内部类

特点:

1):静态内部类的实例不会自动持有外部类的特定实例的引用,在创建内部类的实例时,不必创建外部类的实例

2):静态内部类可以直接访问外部类的静态成员,如果访问外部类的实例成员,必须通过外部类的实例去访问。

3)在静态内部类中可以定义静态成员和实例成员

3)测试类可以通过完整的类名直接访问静态内部类的静态成员

package com.swing;

import java.awt.Color;
import java.awt.Container;

import javax.swing.JFrame;

import com.swing.Outter.Inner;

class Outter
{
	String name="Outter.name";
	
	static class Inner
	{
		static int age=17;
		String name="Inner.name";
		public void test()
		{
			System.out.println(name);
			System.out.println(new Outter().name);
		}
	}
}
public class Example10_1 {
	public static void main(String[] args) {
		Inner in = new Inner();
		in.test();
		
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值