Java基础第五天--内部类,包,修饰符

来源:互联网 发布:淘宝吉他店铺介绍 编辑:程序博客网 时间:2024/05/01 15:16

1. 内部类:就是把类定义到一个类的内部

内部类的位置:

        成员位置:(类中方法外)成员内部类
        局部位置(外部类的成员方法中):局部内部类
访问特点:
        内部类可以直接访问外部类中的成员,包括私有成员
        外部类要访问内部类中的成员必须要建立内部类的对象


问什么是这样的访问特点?看起来是为了使用外部类的私有变量
  本质是现实生活中确实存在这样的现象(如身体内的器官,外部是看不到的
  所以可以使用内部类,内部类并不常用,但是JDK提供的类有内部类,所以要掌握)

 为什么迭代器是个接口而不是具体的类

 迭代器不可能单独存在,迭代器必须依赖集合存在,而多种集合的数据结构不同,存储方式不同,那么,获取的方式也肯定不同。所以无法是具体的类。
 集合类本身最清楚是需要怎么获取数据的, 所以,迭代器的实现都是定义在集合内部,以内部类形式存储,对外提供了一个接口
 
直接使用内部类:
       如果你想直接使用内部类的方法,就得造内部类的对象
       而你要造内部类的对象,就必须依赖外部类
       格式:外部类名.内部类名 对象名 = new 外部类名().new 内部类名();
 
上面方法不推荐,推荐在外部类的成员方法中创建内部类的对象并调用内部类的成员方法
 
2. 成员内部类:
 哪些修饰符可以修饰成员内部类:
 1)private:进行数据保护
 我们不应该在其他类中可以直接访问内部类,所以应该采用私有private修饰
 我们应该提供一个外部类的公共方法来访问,在方法中进行校验
 2)public static:方便调用 Outter.Inner.method();//就可以访问内部类static方法了
 如果内部类被静态修饰,就成为嵌套类了。那么,限定就不再是内部类对象了,而直接是外部类名
 格式:外部类名.内部类名 变量 = new 外部类名.内部类名()
 
3. 局部内部类:
 1)可以访问外部类中的成员
 2)可以访问所在外部类成员方法中的成员变量吗?可以,但是局部变量必须被final修饰
    为什么要用final修饰呢?
    因为局部变量使用完毕就消失了,而内部类还在内存中存在,这个时候,
    内部类还在继续使用局部变量,所以为了延长局部变量的生命周期所以用final修饰
    和类一样的生命周期
   
4. 匿名内部类:属于局部内部类
   前提:存在着一个类(不是外部类)或者接口
   格式:new 类名或者接口名(){重写父类或者接口的方法,或者自己定义方法};
   解释:相当于创建了一个带内容的匿名的类或者接口的子类对象
   之所以用匿名内部类,就是说它用完之后立刻在内存中消失,效率高
  
   这种形式代表的是子类的对象
   1)可以在后面直接.调用方法即可
   2)可以向上转换为父类对象
   如果接口或父类的抽象成员方法很多,可以用这种方法只写一次子类对象
  
5. 包:其实就是文件夹
   作用:  对类进行分类管理,让相同的类可以存在不同的包中
   使用注意: 写在程序文件的第一条语句
   使用格式: 

    1)定义包:package 包名.包名...
    2)使用的时候,一定要带上包名


   包的编译和运行:
   方式1:手动式
   1)通过javac命令编译文件
   2)手动建立包的目录
   3)把class文件放到最终的包下
   4)通过java命令执行,这个时候注意要写类的全路径 java cn.itcast.HelloWorld


   方式2:自动式
   在编译的时候指定路径即可:javac -d . HelloWorld.java
   在运行的时候,还是要带包名 java cn.itcast.HelloWorld
  
6. 不同包下的类之间的访问:
   1)先编译被使用的类Demo
   2)再编译测试类Test
   3)这个时候由于不在同一个包下,所以要使用的是全路径
   4)Demo类的权限不够大,所以,为了足够大,类写成public(被访问的包中的类权限必须是public)
  
   写全路径 很麻烦,为了简化这种做法,java又提供了一个技术;叫导包
   导包的关键和格式:import 包名.包名....;
  
   注意:如果一个包有很多类,全部导入用import com.liuyi.*
   但是,一般情况下,不建议这种导入方法。因为这样会在每次匹配的时候,找很多次才能找到我们想要的
   所以,以后,用哪个类就导入哪个类
  
   在一个类中 package import class的出现顺序  package > import > class
  
7. 权限修饰符--> private; 默认的; protected; public
   1)本类中 四种访问修饰符都能够被访问
   2)同一个包下的子类中 private修饰的内容不能访问到
   3)同一个包下的无关类中 也是private修饰的内容不能访问到
   4)不同包下的子类中 protected 以及 public修饰的内容可以访问到
   5)不同包下的无关类中 只有public能够被访问
  
8. 权限修饰符的组合使用及常见使用
                           类:    成员变量:   构造方法:   成员方法:
   private                              Y                  Y                   Y
   默认                 Y              Y                  Y                   Y
   protected                         Y                  Y                   Y
   public               Y              Y                  Y                   Y
   abstract            Y                                                       Y
   final                  Y              Y                                       Y
   static                                Y                                       Y                                 
   
   常见的组合规则:
   权限修饰符 + (abstract/final/static)
  
   类: public class Demo{}
   成员变量:
          变量:private String name;
          常量:public static final int X=10;
   构造方法:
          不让外界创建:private Demo(){}
          大部分:public Demo(){}
   成员方法:
          不让外界用:private void show(){}
          大部分:public void method()
          抽象方法:public abstract void function();

 

内部类是可以用private  static进行修饰的
0 0
原创粉丝点击