黑马程序员_7_内部类

                                           黑马程序员——内部类

                                       ------- android培训java培训、期待与您交流! ----------

1、内部类定义:在一个类中定义另外一个类,那么另外一个类就叫内部类。

2、内部类的class文件命名:外部类$内部类.class
3、内部类分为成员类部类,局部类部类.......
4、成员内部类的访问方式:
第一种...:在其他类直接创建内部类对象。 格式: 外部类.内部类  变量名 = new 外部类().new 内部类();
创建外部类对象调用内部类对象,这样就得到内部类对象了,因为只有外部类对象存在,成员内部类才可见,代码如下:
   
  1. class Outer{
  2. int x = 3;
  3. //在成员位置,所以叫做成员类部类,创建外部类对象时才可见。
  4. class Inner{
  5. public void method(){
  6. System.out.println("method..."+x);
  7. }
  8. }
  9. }
  10. class InnerClass{
  11. public static void main(String[] args){
  12. //创建外部类对象调用内部类<而内部类是一个类所以是以对象形式存在>得到内部类对象 Outer.Inner
  13. Outer.Inner outIn = new Outer().new Inner();
  14. outIn.method();//输出结果是 method...3
  15. }
  16. }
注意:如果该成员内部类是一个静态的成员内部类,那么创建方式如下:
外部类.内部类  变量名 = new 外部类.内部类();
第二种方式访问在外部类定义一个方法,在方法体中创建内部类对象,代码如下
   
  1. class Inner{
  2. int x=3;
  3. class Outer {
  4. public void show(){
  5. System.out.println("show..."+3);
  6. }
  7. }
  8. public void function(){
  9. new Outer().show();
  10. }
  11. }
成员内部类注意的细节:
a、内部类可以直接访问外部类成员,当外部类与内部类出现同名成员变量时,那么在内部类中默认访问内部类成员变量<就近原则机制>;如果需要访问外部类成员变量时,那么可以通过:
外部类.this.成员变量
b、如果成员内部类使用private修饰,那么该成员内部类就只能在外部类的方法中创建对象进行访问,在其他类不能再创建内部类对象...........
c、如果内部类中出现了静态的成员,那么成员内部类也必须使用static修饰,因为静态成员是随着类的加载而存在,得先有类...
---------------------------------------------------------------------------------------------------
局部内部类定义在方法上,代码如下:
    
  1. class Outer{
  2. int x=3;
  3. public void method(){
  4. final int x=10;//x变量是当方法执行完毕之后马上从内存中消失。
  5. class Inner{
  6. public void show(){
  7. System.out.println("show...");
  8. }
  9. }
  10. }
  11. }
局部内部类:在一个类中函数中 定义另外一个类就称作为局部内部类。
注意的细节:1. 局部内部类中的方法访问了局部变量,那么这时候需要把该局部变量声明为final修饰。

匿名内部类
a、前提内部类必须继承一个类或者实现某个接口,才能创建匿名内部类。
b、定义格式:new 父类或者接口(){定义子类的内容}
c、其实匿名内部类就是一个匿名子类对象。
d、匿名内部类中定义的方法最好不要超过3个...
   
  1. abstract class AbsDemo
  2. {
  3. public abstract void show();
  4. }
  5. class Outer
  6. {
  7. int x=3;
  8. /*
  9. class Inner extends AbsDemo{
  10. public void show(){
  11. System.out.println("show..."+3);
  12. }
  13. }
  14. */
  15. public void function()
  16. {
  17. // new Inner().show();
  18. // 注释中的代码用匿名内部类表示如下
  19. new AbsDemo()
  20. {
  21. public void show()
  22. {
  23. System.out.println("show..."+3);
  24. }
  25. }.show();
  26. }
  27. }
  28. class InnerClassDemo3
  29. {
  30. public static void main(String[] args)
  31. {
  32. new Outer().function();
  33. }
  34. }


                                            ------- android培训java培训、期待与您交流! ----------





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值