java 内部类的使用

Java内部类分为 静态内部类 和非静态内部类,局部内部类,匿名内部类。这里只分析前三种。

非静态内部类:

1.在内部类中,访问自己定义的属性,可以直接访问,也可以通过this.属性名访问:

public class Outer{

class Inner{

private String name="张三";

public void showtName(){

system.out.println(name);

system.out.println(this.name);

}

}

}

2.内部类,可以访问外部类的所有成员,包含private修饰的属性成员

public class Outer{

private String name="李四";

class Inner{

public void getOuterName(){

system.out.println(name);

}

}

}

3.外部成员属性,和内部成员属性 定义的一样时,可以用 外部类名.this.属性名 来访问外部成员, 用this.属性名 访问内部成员;

public class Outer{

private int age=18;

class Inner{

private int age =28;

public void dispalyAge(){

system.out.println(this.age);//---------28

system.out.println(Outer.this.age)//-------18

}

}

}


4.外部类的方法里,调用内部类,需要在该方法里先实例化内部类,获得内部类对象,对象.方法;

public class Outer{

private String name="张三";

public void getInnerMoth(){

Inner in=new Inner();

in.showName();

}

class Inner{

public void showName(){

system.out.println(name);

}

}

}

5.通过外部的静态main方法 实例化内部类,实例化内部类 必须先实例化外部类;

public class Outer{

private String name="张三";

class Inner{

public void showName(){

system.out.println(name);

}

}


public static void main(String args[]){

Outer ou=new Outer();

Outer.Inner in=ou.new Inner();

//  Outer.Inner in= new Outer().new Inner();

in.showName();

}

}

 


局部内部类:

1.声明 的方式

public class Outer{

private String name="张三";

public void getInnerMoth(){

class Inner{ }

}

}

}

2.当局部类的成员属性,方法里的参数,外部类的成员属性 同名。参数可直接访问,局部类成员属性用this.属性名,外部类成员属性用 外部类名.this.成员属性;

public class Outer{

private String name="张三";

public void getInnerMoth(){

class Inner{

private String name="李四";

public void getNames(String name){

system.out.println(name);//参数 name

system.out.println(this.name);//李四

system.out.println(Outer.this.name);//张三

}

}

}

}

}

3.局部内部类 访问他所在的外部方法的参数时(局部变量),此参数必须用final修饰,否侧不能访问;

public class Outer{


public void getInnerMoth(final int age){

int ages;

class Inner{

public void getNames(){

system.out.println(age);//能访问

system.out.println(ages);//报错

}

}

}

}

}

4.局部内部类中不能定义静态属性 即 属性不能用static修饰;

5. 和非静态内部类一样,内部类的实例化 必须先实例化 外部类

public class Outer{


public void getInnerMoth(final int age){

int ages;

class Inner{

Inner(int age){

getNames();

}

public void getNames(){

system.out.println(age); //10

}

}

new Inner(age);

}

public static void main (String args[]){

Outer o=new Outer();

o.getInnerMoth(10);

}

}


静态内部类


1.用 static 修饰的内部类叫做 静态内部类,如果一个静态内部类用static修饰,这个类就相当于是从外部定义的类, 因此 static内部类 可以声明 staic 成员和非static 成员。

public class Outer{

static class Inne{

static int age=20;

int age=10;

}

public static void main(String args[]){

Outer.Inner in=new Outer.Inner();

Inner n=new Inner();

//static内部类 实例化 不需要外部类创建

}

}

2.静态内部类 只能访问 外部类的静态属性 或静态方法 ,可以访问 内部类的静态成员和非静态成员, 因为默认 静态内部类的内部都是静态的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值