教你如何正确的使用java内部类

  介绍

这期内容当中小编将会给大家带来有关教你如何正确的使用java内部类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

<强> 1。什么是内部类

定义在类内部的类,称之为内部类

公共类{
  在就类{//此时是内部类
  }
  }

<强> 2。为什么要使用内部类及# 63;

<强> 3。内部类的分类

对于内部类的分类,可以对比于成员变量的分类。

我们可以根据不同的修饰符或者定义的不同位置把成员变量,可以细分为:类成员变量,实例成员变量,局部变量。

内部类看做是外部类的一个成员,那么内部类可以使用公共/缺?保护/私修饰。还可以是静态修饰。

同理,内部类也根据使用不同的修饰符或者定义的不同位置,将其分成4类:

//外部类   类从{//实例内部类:没有使用静态修饰   类内部{   }   }   公开课InnerDemo1 {   公共静态void main (String [] args) {//创建实例内部类,没有使用静态修饰,属于外部类的对象,因此,创建实例内部类前,必须存在外部类对象   出=新出();//通过外部类对象创建内部类对象   出。内心在=P碌哪诓?);   }   }

。由创建实例内部类的过程可知,当存在内部类对象时,一定存在外部类对象。

b。实例内部类的实例自动持有外部类的实例的引用,实例内部类可以无条件访问外部类的所有字段和方法

注意:当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象

c。外部类中不能直接访问内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问

//外部类   类从{   私人字符串名称=皁ut";   私人整数年龄=17;//实例内部类:没有使用静态修饰   类内部{   私人整数年龄=18;//隐藏现象,隐藏了外部类的年龄   内部(){//特点:1 .实例内部类能直接访问外部类成员//2 .当实例内部类和外部类有同名的字段或者方法时,会发生隐藏现象   system . out。println(名字+ this.age);//输出out18//此时若需要使用外部类的年龄,语法:外部类.this.age   System.out.println (Outter.this.age);//输出17   }   }   }

总结:简单来说,就是看变量的作用域,外部类成员变量的作用域是整个外部类,而内部类在外部类中(可以看做外部类的字段),内部类自然就可以访问外部类。而外部类要去访问内部类的成员,可以这样理解:内部类的成员属于内部类,在内部类中有效,内部类都不存在,其中的成员变量也不会存在,所以,外部类中不能直接访问内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问。

<强>

<强>

//外部类   类从{//静态内部类:使用静态修饰   内部静态类{   }   }   公开课InnerDemo2 {   公共静态void main (String [] args) {//因为静态内部类属于外部类本身,可以直接通过外部类类名来访问(类比字段)   出。内心在新Outter.Inner=();   }   }

。在创建内部类的实例时,不必创建外部类的实例。

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

简单理解:静态成员属于类,非静态成员属于对象,如果要访问外部类的实例成员(非静态成员),当然要先存着外部类对象的。而静态内部类的创建是不需要外部类的对象,因此,如果访问外部类的实例成员,必须通过外部类的实例去访问。

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

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

//外部类
  类从{
  静态字符串名称=皁utter";
  公共整数年龄=17;//静态内部类:使用静态修饰
  内部静态类{
  内部(){//静态内部类能直接访问外部类的静态成员
  System.out.println(名字);//输出了//访问外部类的实例成员,必须通过外部类的实例去访问。
  system . out。println(新出().age);//输出17
  }
  }
  }

注意,局部内部类和方法里面的局部变量一样,是不能有公众保护,私人以及静态修饰符的。

公共类InnerDemo3 {
  公共静态void main (String [] args) {//局部内部类
  类内部{
  }
  }
  }

教你如何正确的使用java内部类