java嵌套内部类_Java 内部类(嵌套类)和局部类

嵌套类

定义在另一个类中的类,就叫嵌套类。

在嵌套类外层的累,称为:外部类

最外层的外部类,称为:顶级类

嵌套类又分为:内部类和静态嵌套类。

内部类

没有被static修饰的嵌套类,非静态嵌套类。

//外部类又是顶级类

public class Person {

private int age;

//内部类

public class Hand {

private int weight;

}

}

跟实例变量、实例方法一样,内部类与外部类的实例相关联。

必须先创建外部类实例,然后再用外部类实例创建内部类实例。

//必须先创建person实例,才能创建hand对象。

Person person = new Person()

Hand hand = person.new Hand();

内部类不能定义除编译时常量(static final)以外的任何static成员。

内部类可以直接访问外部类中的所有成员(即使被申明为private)

外部类可以直接访问内部类实例的成员变量、方法(即使被申明为private)

public class Company {

private String name;

public Company (String name) {

this.name = name;

}

public void fire(Employee e) {

System.out.println(this.name + "fire" + e.no);

}

public class Employee {

private int no;

public Employee(int no) {

this.no = no;

}

public void show() {

System.out.println(Company.this.name + ":" + this.no);

}

}

}

Company company = new Company("阿里巴巴");

Employee employee = company.new Employee(100);

company.fire(employee);

employee.show();

打印结果:

阿里巴巴fire100

阿里巴巴:100

静态嵌套类

被static修饰的嵌套类

静态嵌套类在行为上就是一个顶级类,只是定义的代码写在了另一个类中。

可以直接访问外部类中的静态成员和方法(即使被声明为private)

public class Person {

private int age;

private static String name;

private static void run() {

System.out.println("Person - run");

}

public static class Car{

public void print() {

System.out.println(name);

run();

}

}

}

什么情况下使用嵌套类?

如果类A只用在类C内部,可以考虑将类A嵌套到类C中

封装性更好

程序包更加简化

增强可读性、维护性

如果类A需要经常访问类C的非公共成员,可以考虑将类A嵌套到类C中

另外也可以根据需要将类A影藏起来,不对外暴露

如果需要经常访问非公共的实例成员,则设计成内部类(费静态嵌套类),否则设计成静态嵌套类

如果必须先有C实例,才能创建A实例,那么可以将A设计为C的内部类

局部类

可以定义在代码块中的类(可以定义在方法中、for循环中、if语句中等)

局部类不能定义除编译时常量以外的任何static成员

局部类只能访问final或者有效final的局部变量

从Java 8开始,如果局部变量没有被第二次赋值,就认定为是有效final

局部类可以直接访问外部类中的所有成员(即使被声明为private)

局部类只有定义在实例相关的代码块中,才能直接访问外部类中的实例成员(实例变量、实例方法)

public class TestLocalClass {

private int a = 1;

private static int b = 2;

private static void test1() {}

private void test2() {}

public void test3() {

int c = 2;

class LocalClass {

static final int d = 4;

void test4() {

System.out.println(a + b + c + d);

test1();

test2();

}

}

new LocalClass().test4();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值