目录
内部类定义
分类
内部类特点
成员内部类
代码
测试类
private成员内部类代码
private成员内部类测试类
静态内部类
代码
测试
局部内部类
代码
测试
匿名内部类
内部类定义
定义:内部类就是在一个类的内部再定义一个类,比如A类中定义一个B类,那么B类相对于A类来说就是一个内部类
分类
- 成员内部类
- 静态内部类
- 局部内部类
- 匿名内部类
内部类特点
- 内部类可以直接访问外部类的成员,包括私有成员
- 外部类想要访问内部类成员必须建立内部类对象
成员内部类
代码
public class Outer {
private int id=10;
public void out(){
System.out.println("我是外部类方法");
}
class Inner{
public void in(){
System.out.println("我是内部类方法");
}
//内部可以获得外部类的私有属性
public int getId() {
return id;
}
//内部可以获得外部类的私有以及非私有方法
public void get(){
out();
}
}
}
测试类
public class Test {
public static void main(String[] args) {
Outer outer = new Outer();
//通过外部类来实例化内部类
Outer.Inner inner = outer.new Inner();
//获得内部类方法
inner.in();
//获得外部类私有属性
System.out.println(inner.getId());
//获得外部类方法
inner.get();
}
}
- 内部类可以直接访问外部类的成员,包括私有成员
- 外部类想要访问内部类成员必须建立内部类对象
成员内部类
代码
public class Outer {
private int id=10;
public void out(){
System.out.println("我是外部类方法");
}
class Inner{
public void in(){
System.out.println("我是内部类方法");
}
//内部可以获得外部类的私有属性
public int getId() {
return id;
}
//内部可以获得外部类的私有以及非私有方法
public void get(){
out();
}
}
}
测试类
public class Test {
public static void main(String[] args) {
Outer outer = new Outer();
//通过外部类来实例化内部类
Outer.Inner inner = outer.new Inner();
//获得内部类方法
inner.in();
//获得外部类私有属性
System.out.println(inner.getId());
//获得外部类方法
inner.get();
}
}
public class Outer {
private int id=10;
public void out(){
System.out.println("我是外部类方法");
}
class Inner{
public void in(){
System.out.println("我是内部类方法");
}
//内部可以获得外部类的私有属性
public int getId() {
return id;
}
//内部可以获得外部类的私有以及非私有方法
public void get(){
out();
}
}
}
测试类
public class Test {
public static void main(String[] args) {
Outer outer = new Outer();
//通过外部类来实例化内部类
Outer.Inner inner = outer.new Inner();
//获得内部类方法
inner.in();
//获得外部类私有属性
System.out.println(inner.getId());
//获得外部类方法
inner.get();
}
}
注意
成员内部类被Private修饰以后,无法被外界直接创建创建对象使用,所以可以创建外部类对象,通过外部类对象间接访问内部类的资源(private权限修饰符生效的为本类,这个本类就是指本外部类)
private成员内部类代码
public class Outer {
private int id=10;
public void out(){
System.out.println("我是外部类方法");
}
//外部类使用内部类资源
public void find(){
//外部类无法直接获取内部类的属性及方法,如果要获取需要创建内部类对象
//创建内部类对象
Inner inner = new Inner();
//获得内部类方法
inner.in();
//获得内部类属性
System.out.println(inner.sum);
}
private class Inner{
private int sum=100;
public void in(){
System.out.println("我是内部类方法");
}
//内部可以获得外部类的私有属性
public int getId() {
return id;
}
//内部可以获得外部类的私有以及非私有方法
public void get(){
out();
}
}
}
private成员内部类测试类
public class Test {
public static void main(String[] args) {
Outer outer = new Outer();
outer.find();
}
}
静态内部类
代码
public class Outer {
private int id=10;
public void out(){
System.out.println("我是外部类方法");
}
public static class Inner{
public int sum=100;
public static void in(){
System.out.println("我是内部类方法");
}
}
}
测试
public class Test {
public static void main(String[] args) {
//创建静态内部类对象
Outer.Inner inner = new Outer.Inner();
//访问静态内部类的属性
System.out.println(inner.sum);
//访问静态内部类里的静态资源
Outer.Inner.in();
}
}
局部内部类
代码
public class Outer {
private int id=10;
public void out(){
System.out.println("我是外部类方法");
class Inner{
private int sum=100;
private void in(){
System.out.println("我是内部类方法");
}
}
//使用局部内部类的资源
Inner inner = new Inner();
System.out.println(inner.sum);
inner.in();
}
}
测试
public class Test {
public static void main(String[] args) {
new Outer().out();
}
}
匿名内部类
public class Outer {
public static void main(String[] args) {
//创建匿名内部类——实现了该接口的实现类,并调用save方法
new UserService(){
@Override
public void save() {
System.out.println("我是save方法");
}
}.save();
//创建匿名内部类——该抽象类的子类
new Aclass(){
@Override
void delete() {
System.out.println("我是delete方法");
}
};
}
}
interface UserService{
void save();
}
abstract class Aclass{
abstract void delete();
}
public class Test {
public static void main(String[] args) {
Outer outer = new Outer();
outer.find();
}
}
静态内部类
代码
public class Outer {
private int id=10;
public void out(){
System.out.println("我是外部类方法");
}
public static class Inner{
public int sum=100;
public static void in(){
System.out.println("我是内部类方法");
}
}
}
测试
public class Test {
public static void main(String[] args) {
//创建静态内部类对象
Outer.Inner inner = new Outer.Inner();
//访问静态内部类的属性
System.out.println(inner.sum);
//访问静态内部类里的静态资源
Outer.Inner.in();
}
}
局部内部类
代码
public class Outer {
private int id=10;
public void out(){
System.out.println("我是外部类方法");
class Inner{
private int sum=100;
private void in(){
System.out.println("我是内部类方法");
}
}
//使用局部内部类的资源
Inner inner = new Inner();
System.out.println(inner.sum);
inner.in();
}
}
测试
public class Test {
public static void main(String[] args) {
new Outer().out();
}
}
匿名内部类
public class Outer {
public static void main(String[] args) {
//创建匿名内部类——实现了该接口的实现类,并调用save方法
new UserService(){
@Override
public void save() {
System.out.println("我是save方法");
}
}.save();
//创建匿名内部类——该抽象类的子类
new Aclass(){
@Override
void delete() {
System.out.println("我是delete方法");
}
};
}
}
interface UserService{
void save();
}
abstract class Aclass{
abstract void delete();
}
public class Test {
public static void main(String[] args) {
//创建静态内部类对象
Outer.Inner inner = new Outer.Inner();
//访问静态内部类的属性
System.out.println(inner.sum);
//访问静态内部类里的静态资源
Outer.Inner.in();
}
}
局部内部类
代码
public class Outer {
private int id=10;
public void out(){
System.out.println("我是外部类方法");
class Inner{
private int sum=100;
private void in(){
System.out.println("我是内部类方法");
}
}
//使用局部内部类的资源
Inner inner = new Inner();
System.out.println(inner.sum);
inner.in();
}
}
测试
public class Test {
public static void main(String[] args) {
new Outer().out();
}
}
匿名内部类
public class Outer {
public static void main(String[] args) {
//创建匿名内部类——实现了该接口的实现类,并调用save方法
new UserService(){
@Override
public void save() {
System.out.println("我是save方法");
}
}.save();
//创建匿名内部类——该抽象类的子类
new Aclass(){
@Override
void delete() {
System.out.println("我是delete方法");
}
};
}
}
interface UserService{
void save();
}
abstract class Aclass{
abstract void delete();
}
public class Outer {
public static void main(String[] args) {
//创建匿名内部类——实现了该接口的实现类,并调用save方法
new UserService(){
@Override
public void save() {
System.out.println("我是save方法");
}
}.save();
//创建匿名内部类——该抽象类的子类
new Aclass(){
@Override
void delete() {
System.out.println("我是delete方法");
}
};
}
}
interface UserService{
void save();
}
abstract class Aclass{
abstract void delete();
}



