什么是内部类

程序员成长之旅 · 程序员成长之旅/Java学习/笔记 · 1770 字

内部类 顾名思义 就是一个类的内部 构造的类 除了普通的内部类还分为静态内部类以及局部内部类 public class Pepole{//有了内部类 这层外边的类 就是外部类啦 public class Student{//类的内部创建的类就是 内部类 } }

5

1 public

class

Pepole { //有了内部类 这层外边的类 就是外部类啦 2

public

class

Student { //类的内部创建的类就是 内部类 3

4 } 5 } 那么内部类有什么作用呢? 答: 实现更好的封装 可以把内部类隐藏在外部类里面,不准许同一个包中的其他类访问该类. public class Pepole{//有了内部类 这层外边的类 就是外部类啦 private String name = "XiaoMing"; //创建一个外部私有变量 public class Student{//类的内部创建的类就是 内部类 String ID = "9282171902";//外部类不能访问内部类的变量 public void getInfo(){ System.out.println("获取外部私有名字:"+name);//内部类可以访问外部类所有成员 反之不行 System.out.println("获取内部类ID:"+ID); } } }

x

1 public

class

Pepole { //有了内部类 这层外边的类 就是外部类啦 2

private

String

name

=

"XiaoMing" ; //创建一个外部私有变量 3

public

class

Student { //类的内部创建的类就是 内部类 4

String

ID

=

"9282171902" ; //外部类不能访问内部类的变量 5

public

void

getInfo (){ 6

System . out . println ( "获取外部私有名字:" + name ); //内部类可以访问外部类所有成员 反之不行 7

System . out . println ( "获取内部类ID:" + ID ); 8 } 9 10 } 11 } 输出 获取外部私有名字:XiaoMing 获取内部类ID:9282171902 通过以上的代码不难看出内部类有以下特征 1.内部类可以提供更好的封装,可以把内部类藏在外部类之内,不准许统一包中的其他类访问该类. 2.内部类可以直接访问所有的外部类数据, 包括私有数据 3.内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便 补充 4.内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便 声明方法 //声明方法 //定义成员内部类后,必须使用外部类对象来创建内部类对象,即 //内部类 对象名 = 外部类对象.new 内部类(); People LeiLei = new People();//首先声明一个外部类对象 People.Student leilei = LeiLei.new Student();//内部类 对象名称 = 外部类对象.new 内部类();

x

1 //声明方法 2 //定义成员内部类后,必须使用外部类对象来创建内部类对象,即 3 //内部类 对象名 = 外部类对象.new 内部类(); 4 People

LeiLei

=

new

People (); //首先声明一个外部类对象 5 People . Student

leilei

=

LeiLei . new

Student (); //内部类 对象名称 = 外部类对象.new 内部类(); 除了普通的内部类 还有静态内部类以及局部内部类 静态内部类 通常指的是带static标识符的内部类 也成为嵌套类

public class People { private String name = "LeiLei"; static String ID = "810xxxxx212xxxxxxx1542xxxx"; public static class Student{//创建内部静态类 Student String name = "leilei"; String ID = "20151234"; public void stuInfo(){ System.out.println("访问内部类中的name:"+name); System.out.println("访问外部类中的name:"+new People().name);//访问外部动态变量需要 new 外部类().变量名 System.out.println("访问内部类中的ID"+ID); System.out.println("访问外部类中的ID:"+People.ID);//访问外部类中变量名相同的静态变量直接 类名.变量名 } } }

18

1 public

class

People { 2

private

String

name

=

"LeiLei" ; 3

static

String

ID

=

"810xxxxx212xxxxxxx1542xxxx" ; 4

public

static

class

Student { //创建内部静态类 Student 5

String

name

=

"leilei" ; 6

String

ID

=

"20151234" ; 7

public

void

stuInfo (){ 8

System . out . println ( "访问内部类中的name:" + name ); 9

System . out . println ( "访问外部类中的name:" + new

People (). name ); //访问外部动态变量需要 new 外部类().变量名 10 11

System . out . println ( "访问内部类中的ID" + ID ); 12

System . out . println ( "访问外部类中的ID:" + People . ID ); //访问外部类中变量名相同的静态变量直接 类名.变量名 13 14 } 15 } 16 17 } 18 public class Test { public static void main(String[] args){ People.Student Leilei = new People.Student();//直接可以通过类名直接对其创建对象 无需先创建外部类再创建内部类 Leilei.stuInfo(); } }

1 public

class

Test { 2

public

static

void

main ( String [] args ){ 3

People . Student

Leilei

=

new

People . Student (); //直接可以通过类名直接对其创建对象 无需先创建外部类再创建内部类 4

Leilei . stuInfo (); 5 } 6 } 7 所以这种静态内部类的特点就是 1.静态内部类 不能直接访问外部类的非静态成员 ,但可以通过 new 外部类().成员 的方式访问 2.如果外部类的静态成员与内部类的成员名称相同,可通过类名.静态成员访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过成员名直接调用外部类的静态成员 3.创建静态内部类的对象时, 不需要外部类的对象 ,可以直接创建 内部类 对象名= new 内部类();

局部类 public class People { public void peopleInfo(){ String name = "LeiLei";//这鬼东西变量名重名就访问不到了!! String ID = "810xxxxx212xxxxxxx1542xxxx";//这鬼东西变量名重名就访问不到了!! int test =1; String test2="这鬼东西变量名重名就访问不到了!!"; class Student{//创建局部类 Stydent String name = "leilei"; String ID = "20151234"; public void stuInfo(){ System.out.println("访问局部类中的name:"+name); System.out.println("访问方法中的name:"+test);//这鬼东西变量名重名就访问不到了!! System.out.println("访问局部类中的ID"+ID); System.out.println(test2);//这鬼东西变量名重名就访问不到了!! } } Student leilei = new Student();//执行该方法的时候自动执行自己 leilei.stuInfo(); } }

23

1 public

class

People { 2

public

void

peopleInfo (){ 3

String

name

=

"LeiLei" ; //这鬼东西变量名重名就访问不到了!! 4

String

ID

=

"810xxxxx212xxxxxxx1542xxxx" ; //这鬼东西变量名重名就访问不到了!! 5

int

test

= 1 ; 6

String

test2

"这鬼东西变量名重名就访问不到了!!" ; 7

class

Student { //创建局部类 Stydent 8

String

name

=

"leilei" ; 9

String

ID

=

"20151234" ; 10

public

void

stuInfo (){ 11

System . out . println ( "访问局部类中的name:" + name ); 12

System . out . println ( "访问方法中的name:" + test ); //这鬼东西变量名重名就访问不到了!! 13 14

System . out . println ( "访问局部类中的ID" + ID ); 15

System . out . println ( test2 ); //这鬼东西变量名重名就访问不到了!! 16 } 17 18 } 19

Student

leilei

=

new

Student (); //执行该方法的时候自动执行自己 20

leilei . stuInfo (); 21 } 22 } 23 public class Test { public static void main(String[] args){ People LeiLei = new People(); LeiLei.peopleInfo(); } }

1 public

class

Test { 2

public

static

void

main ( String [] args ){ 3

People

LeiLei

=

new

People (); 4

LeiLei . peopleInfo (); 5 } 6 } 7 执行结果 访问局部类中的name:leilei 访问方法中的name:1 访问局部类中的ID20151234 这鬼东西变量名重名就访问不到了!!