JAVA基础:内部类(4种)

内部类
在一个类中定义另一个类叫做内部类,一个独立的类,在编译时内部类会被编译成独立.class文件
只不过在文件名前面有外部类的类名和$符号
例如:在A类中定义一个B类  -> A$B.class
注意: 1)内部类是外部类的一个成员,因此内部类可以自由访问外部类的成员,包括私有成员。
            2)但是外部类不能访问内部类属性
最主要的内部类:
1.成员内部类    成员变量 --->
    (1)成员内部类可以等同看作成员变量,位置在:外部类类体中,方法体之外
    (2)可以用控制访问权限的修饰符修饰 
    (3)成员内部类不能拥有静态声明
    (4)成员内部类可以访问外部类的所有数据
1.1 成员内部类创建对象
      外部类 外部类对象  = new 外部类名() ;
      外部类名.内部类名 内部类对象  = 外部类对象.new 内部类名();
      注意:如果导入了import包名.外部类名.内部类名;可省略成为:内部类名 内部类对象  = 外部类对象.new 内部类名();

2.静态成员内部类    静态变量
     (1)静态内部类可以看作静态变量
     (2)静态内部类可以被控制访问权限修饰从
     (3)静态内部类可以声明静态成员(也可以声明非静态成员)
     (4)静态内部类可以直接访问我们外部类的静态数据,而不能访问成员数据(原因:随外部类加载后,成员数据还未加载)
 2.1静态成员内部类创建对象:
     外部类名.静态内部类名  静态内部类对象=new 外部类名.静态类名();


/*18.10.17
 *         
 * 
 * 3.局部内部类    局部变量
 *     (1)局部内部类可以等同看作局部变量 
 *     (2)不能使用控制访问权限修饰
 *     (3)局部内部类不能拥有静态声明(方法在栈中会被销毁,不是永存的)
 * 重点:(4)局部内部类访问局部变量的时候,局部变量必须是final修饰的
 * 解释: 方法在栈中,因此局部内部类也在栈中,当方法运行完毕之后,这个局部内部类应该被销毁,而对象可能没有被销毁,当对象去访问一个不存在的变量。(对象在,变量不在) 
 *      当加入final时,将局部变量放入了内部类的成员变量中。
 * 
   4.匿名内部类
 *      (1)匿名内部类:指类没有名字
 *      (2)只传入接口
 *      (3)好处:少定义一个类
 *         缺点:无法重复利用
 *      (4)用法:方法(new 接口)(理解:在不知道名字的情况下,接口想象成父类便于理解)
 * 
 * 
 */
public class TestInnerClass {
	//静态变量
	private static String st1="111";
	//成员变量
	private String st2="222";
	//静态方法
	private static void m1(){
	}
	//成员方法
	private void m2() {
	}
	
	//关于匿名内部类
	public static void test(CustomerService cs) {
		cs.logout();
	}
	
	 public static void main(String[] args){
		//成员内部类创建对象
     	//创建外部类:方式一
     	TestInnerClass anonymous=new TestInnerClass();
     	TestInnerClass.TestMemberInnerClass member1=anonymous.new TestMemberInnerClass();
     	//创建外部类:方式二
     	TestMemberInnerClass member2=new TestInnerClass().new TestMemberInnerClass();
     	
     	//传入的是一个接口
     	test(new CustomerService() {
     		//实现接口
			public void logout() {
				System.out.println("我已经成功退出");
			}
		});
     	
     }

	class TestMemberInnerClass{  //成员内部类
    //静态方法
    //public static void  m3(){}
	//静态变量
	//public static
	//普通方法
    public void m4(){
    System.out.println(st1);
    System.out.println(st2);
    m1();
    m2();
    }	
    }
	
	//关于匿名内部类
	interface CustomerService{
		void logout();
	}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值