当前位置:首页 > JAVA教程 > JAVA基础

12四种权限修饰符 & 内部类

1.四种权限修饰符

        public > protected > (default) > private
同一个类    ✓ checkmark      ✓ checkmark      ✓ checkmark     ✓ checkmark 
同一个包    ✓ checkmark      ✓ checkmark      ✓ checkmark     × times ×
不同包子类   ✓ checkmark      ✓ checkmark      × times ×    × times ×
不同包非子类  ✓ checkmark      × times ×     × times ×    × times ×

2.内部类

【1】概念:如果一个事物的内部包含另一个事物,那么这就是一个类内部包含另一个类
【2】分类:
(1)成员内部类
(2)局部内部类(包含匿名内部类)

3.成员内部类

【1】格式

修饰符 class 外部类名称 {   修饰符 class 内部类名称 {   //...   }   //... } 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

【2】注意:内用外,随意访问;外用内,一定要借助内部类对象
【3】使用:
(1)间接方式:在外部类的方法中,使用内部类;然后main只是调用外部类的方法
(2)直接方式:公式:

类名称 对象名 = new 类名称(); 外部类名称.内部类名称 对象名 = new 外部类名称().new 内部类名称(); 
  • 1
  • 2

【4】同名变量的访问
(1)如果出现重名现象格式是:

外部类名称.this.外部类成员变量名
  • 1

4.局部内部类

【1】如果一个类定义在一个方法内部的,那么这个类就是一个局部内部类。
【2】“局部”:只有当前方法才能使用它,出了这个方法外就不能用了
【3】格式

修饰符 class 外部类名称 {   修饰符 返回值类型 外部类方法名称(参数列表){     class 局部内部类名称 {       // ...     }   } } 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

【4】final问题
局部内部类,如果希望访问所在方法的局部变量,那么这个局部变量必须是【有效final的】

原因:
(1)new的对象在堆内存当中
(2)但局部变量跟着方法走,在栈内存中
(3)方法运行结束后,立刻出栈,局部变量就会立刻消失
(4)new的对象会在堆中持续存在,直到垃圾回收为止

TIPS:
从java8开始,只要局部变量事实不变,那么final关键字可以省略

5.权限修饰符规则

【1】外部类:public/(default)
【2】成员内部类:都可以
【3】局部内部类:什么都不能写,和(defult)不同

6.匿名内部类

【1】如果接口的实现类(或者父类的子类)只需要使用唯一的一次,那么这种情况下,就可以省略掉该类的定义,改为使用匿名内部类
【2】格式

接口名称 对象名 = new 接口名称() {    // 覆盖重写接口中所有抽象方法 }; 
  • 1
  • 2
  • 3

TIPS:
【1】格式的解析:
(1)new代表创建对象的动作
(2)接口名称是匿名内部类需要实现哪个接口
(3){…}是匿名内部类的内容
【2】匿名内部类,在【创建对象】时,只能使用唯一的一次
如果希望多次创建对象,而且类的内容一样时,那么就必须使用单独定义的实现类
【3】匿名对象,在调用方法时,只能调用唯一的一次
如果希望同一个对象,调用多次方法,那么必须给对象起一个名字
【4】匿名内部类是省略了实现类(子类)
匿名对象是省略了对象的名称
这两是不是同一个东西!

7.接口作为成员变量类型

//1.使用单独定义的实现类,匿名对象 hero.setskill(new SkillImpl()); //2.使用匿名内部类 Skill skill = new Skill(){   @override   public void use(){} }; hero.setskill(skill); //3.同时使用匿名对象和匿名内部类 hero.setskill(new Skill(){   @override   public void use(){} }) ; 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

8.接口作为参数和返回值

java.util.List是ArrayList所实现的接口


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!