首页 > 代码库 > JAVA学习第十六课(内部类及其特点)
JAVA学习第十六课(内部类及其特点)
内部类:
内部类就是一个类定义在一个类里,定义在类中的类就叫做内部类
一、访问特点:
内部类可以直接访问外部类的成员,包括私有成员
外部类要访问内部类的成员,必须创建内部类的对象
二、什么时候用?
一般用于分析事物A时,发现该事物A描述中还有事物B,发现这个事物B还在访问被描述的事物A的内容,那么这个事物B就要定义为内部类
比如:描述身体的时候,还有大脑,而大脑还可以访问人体其他部位,那么大脑就要定义内部类
三、内部类的小特点:
1.内部类可以被修饰符 修饰。
private class in()
2.直接访问外部类中的内部类成员
如果直接 in BLF = new in();,这种方式是不行的,假设我还有个ou2类他的内部类也是in,那这个BLF是谁的?
定义方式:
out.in BLF2 = new out().new in();//这种格式不多见,一般内部类都是私有的
BLF2.showou();
3.内部类是静态的,那么内部类就相当于是外部类
因为外部类一加载就存在了
PS:如果内部类中有定义了静态成员,那么该内部类也必须是静态的,否则编译失败
四、内部类细节:
为什么内部类可以直接访问外部类中的成员呢?
因为内部类持有外部类的引用,外部类名.this
PS:实际开发不出现这种写法
五、内部类的局部类
内部类除了可以存放在成员上,也可以存放在局部位置上
特例:
1.从内部中访问局部变量,需要被声明为最终类型
也就是说,内部类在局部位置上只能访问局部中被final修饰的局部变量
为什么要定义为final?
详见下面代码
我们知道所有的类都是继承Object类的
内部类就是一个类定义在一个类里,定义在类中的类就叫做内部类
一、访问特点:
内部类可以直接访问外部类的成员,包括私有成员
外部类要访问内部类的成员,必须创建内部类的对象
简单体现:
import out.in; class out { private int num = 3; class in { public void showou() { System.out.println(num); } } public void showin() { in BLF = new in(); BLF.showou(); } } public class Main { public static void main(String[] args) { out BLF = new out(); BLF.showin(); } }
二、什么时候用?
一般用于分析事物A时,发现该事物A描述中还有事物B,发现这个事物B还在访问被描述的事物A的内容,那么这个事物B就要定义为内部类
比如:描述身体的时候,还有大脑,而大脑还可以访问人体其他部位,那么大脑就要定义内部类
三、内部类的小特点:
1.内部类可以被修饰符 修饰。
private class in()
2.直接访问外部类中的内部类成员
如果直接 in BLF = new in();,这种方式是不行的,假设我还有个ou2类他的内部类也是in,那这个BLF是谁的?
定义方式:
out.in BLF2 = new out().new in();//这种格式不多见,一般内部类都是私有的
BLF2.showou();
3.内部类是静态的,那么内部类就相当于是外部类
因为外部类一加载就存在了
class out { private static int num = 3; static class in { public void showou() { System.out.println(num);//静态类中访问外部类的成员变量也必须是静态的 } public static void showsta() { System.out.println("sta show"+num); } } public void showin() { in BLF = new in(); BLF.showou(); } } public class Main { public static void main(String[] args) { //内部类是静态的,成员是非静态的 out.in BLF = new out.in(); BLF.showou(); //如果内部类是静态的,成员也是静态的情况 out.in.showsta(); } }
PS:如果内部类中有定义了静态成员,那么该内部类也必须是静态的,否则编译失败
四、内部类细节:
为什么内部类可以直接访问外部类中的成员呢?
因为内部类持有外部类的引用,外部类名.this
class out { int num = 3; class in { int num = 4; public void showou() { int num = 5; System.out.println(num);//如果想打印4,this.num System.out.println(this.num); //也可以 System.out.println(in.this.num); //如果想打印3 System.out.println(out.this.num); } } public void showin() { in BLF = new in(); BLF.showou(); } } public class Main { public static void main(String[] args) { out.in BLF = new out().new in(); BLF.showou(); } }
PS:实际开发不出现这种写法
五、内部类的局部类
内部类除了可以存放在成员上,也可以存放在局部位置上
class out { int num = 3; void show1() { class in { void show() { System.out.print(num); } } in blf = new in();//创建对象,但是不能在外部类中创建 blf.show(); } } public class Main { public static void main(String[] args) { out blfOut = new out(); blfOut.show1(); } }
特例:
1.从内部中访问局部变量,需要被声明为最终类型
也就是说,内部类在局部位置上只能访问局部中被final修饰的局部变量
class out { int num = 3; void show1() { final int x = 5; class in { void show() { System.out.println(x); } } in blf = new in(); blf.show(); } } public class Main { public static void main(String[] args) { out blfOut = new out(); blfOut.show1(); } }
为什么要定义为final?
详见下面代码
我们知道所有的类都是继承Object类的
class out { int num = 3; Object show1()//如果这个方法是一个返回对象的方法 { int x = 5; class in { void show() { System.out.println(x); } } Object blf = new in(); //blf.show(); return blf; } } public class Main { public static void main(String[] args) { out blfOut = new out(); Object blfObject = blfOut.show1();//blfObject接受这个对象,那么blfOut的show1方法就执行完了 //那么就意味着show1的x就没了,所以必须加final,final修饰的x是终身为5,不会变化的 } }
JAVA学习第十六课(内部类及其特点)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。