A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 雪中鱼01 中级黑马   /  2016-10-15 10:02  /  856 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Rt,有什么必要写内部类?

来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端

2 个回复

倒序浏览
访问权限的问题吧,感觉相当于一个private类
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
一般来说开发用的比较少,但是匿名内部类是可以当做形式参数进行传递的.
关于内部类
        A:内部类概述:定义在类中的类叫做内部类
        B:内部类访问特点
                a:内部类可以直接访问外部类的成员,包括私有。
                b:外部类要访问内部类的成员,必须创建对象。
                外部类名.内部类名 对象名 = 外部类对象.内部类对象;
                Outer.Inner oi = new Outer().new Inner();
        C:private 修饰内部类
                需要对外提供公共的创建内部类的方法,才能使用
                Inner i = new Inner();
        D:static 修饰内部类
                外部类名.内部类名 对象名 = 外部类名.内部类对象;
                Outer.Inner oi = new Outer.Inner();
        E:局部内部类访问局部变量,局部变量必须用final修饰
                因为当调用这个方法时,局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的,当方法弹栈,这个局部变量也会消失,那么如果局部内部类对象还没有马上消失想用这个局部变量,就没有了,如果用final修饰会在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,也可以继续使用
                Outer{
                        method() {
                                final int a = 10;
                                Inner {
                                       
                                }
                        }
                }
                但是jdk1.8取消了这个事情
[Java] 纯文本查看 复制代码
package com.itheima.exam.time1;

public class Test5 {	//Test5为基本测试类

	/**
	 * 如何调用内部内的方法
	 */
	public static void main(String[] args) {//测试类主方法
		/*Person p = new Person();//第一种方法:1.先创建一个外部类对象P
		p.show();	//2.调用成员方法show(),然后在show()方法中创建Student对象s,通过s.method()调用内部类中的方法 */
		Person.Student ps = new Person().new Student();	//第二种方法:创建内部类对象
		ps.method();	//直接调用内部类中的method()方法
		//注意:如果内部类被私有,即private class Student{},
		//此时第二种方法不能使用,因为私有的内部类不能被直接访问,此时如果需要调用内部类中method()方法只能通过第一种方法.
	}
}

class Person {		//Person外部类
	int a = 10;		//Person类的成员变量
	
	class Student {	//Student内部类,也可以将其看作是Person类的一个成员.
		public void method() {	//内部类中的method()方法
			System.out.println(a);//可以直接方法外部内的成员变量a
		}
	}
	
	public void show(){		//Person类的成员方法
		Student s = new Student();
		s.method();
	}
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马