什么是内部类
内部类 顾名思义 就是一个类的内部 构造的类 除了普通的内部类还分为静态内部类以及局部内部类 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 这鬼东西变量名重名就访问不到了!!