Javafinal关键字、内部类

    

一、final关键处的使用

1.修饰类

被final修饰的类,不能被继承

我们学过的String 、Math都是被final修饰的类

2.修饰成员方法

被final修饰的方法,不能被覆盖重写。

final 和 abstract 不能同时使用。

3.修饰成员变量

  1. 被final修饰的成员变量其值不能变
      1. 基本数据类型:值不能变
      2. 引用数据类型:地址值不能变,地址值里面的成员变量的值可以改变
  2. 在定义的时候必须赋值
      1. 直接赋值:基本数据类型,直接给值。引用数据类型直接new对象
      2. 构造赋值:必须在所有的构造方法中,都给该变量进行赋值操作

 

4.修饰局部变量

被final修饰的局部变量其值不能变:

基本数据类型:值不能变

引用数据类型:地址值不能变

  • 权限修饰符

权限修饰符/范围            当前类              同一个包         不同包(子类)           任意地方

private                                          Y                          N                         N                                  N

(default)                                        Y                          Y                          N                                  N

protected                                      Y                          Y                          Y                                   N

public                                            Y                          Y                          Y                                   Y

内部类

  1. 内部类的概念与分类

什么叫内部类:类中包含

内部类的分类:

  1. 成员内部类
  2. 局部内部类
  3. 匿名内部类
  1. 成员内部类

 

成员内部类的定义格式

public class 类名{

   //成员变量

 

   //成员方法

 

   //成员内部类

   class 类名{

       //内部类的成员变量

 

      //内部类的成员方法

}

}

 

成员内部类的使用

内部类使用外部类的成员(成员变量和成员方法):直接使用

外部类使用内部类的成员(成员变量和成员方法):

  1. 直接访问:外部类.内部类 对象名 = new 外部类().new 内部类();
  2. 间接访问:

在外部类中定义方法,在方法中创建内部类对象,然后通过外部类对象调用该方法,从而完成间接调用。

 

成员内部类的同名变量访问

在内部类的方法中访问同名的外部类成员变量:

访问内部类方法的局部变量:直接访问

访问内部类方法的成员变量:this.成员变量

访问外部类方法的成员变量:外部类.this.成员变量

 

成员内部类注意事项

非静态成员内部类中,不能有静态成员

静态成员内部类中,可以有静态成员

2.局部内部类

 

局部内部类的定义

public class 类名{

   //成员变量

 

   //成员内部类

 

   //成员方法

      public void show(){

         //局部变量

 

        //局部内部类

        class 类名{

             //局部内部类的成员变量

 

             //局部内部类的成员方法

}

}

}

 

访问局部内部类

步骤:

  1. 创建外部类对象
  2. 在对应的成员方法中创建局部内部类对象
  3. 外部类对象调用这个成员方法

 

局部内部类final问题

在局部内部类的成员方法中,访问所在方法(外部类的方法)的局部变量,该局部变量必须是有效的final。

 

局部内部类注意事项

局部内部类中不能有静态的成员。

3.匿名内部类

前提:必须继承一个父类或实现一个接口

 

匿名内部类格式

我们所获取的是一个匿名内部类的对象(可以作为成员变量来使用,也可以作为局部变量来使用):

接口 对象名 = new 接口(){

    //覆盖重写接口的所有抽象方法

};

 

应用场景

某一个接口的实现类/父类的子类 只需要创建一个对象,我们可以使用匿名内部类。这样操作简单。

 

什么叫类只使用一次:就是通过这个类只创建一个对象

 

使用匿名内部类并且使用匿名对象

//使用匿名内部类创建对象的场景

某一个接口实现类只需要创建一个对象,

//匿名对象的使用场景

而且该对象只是用一次。

隐含条件:一个接口只有一个抽象方法的时候

接口的特殊应用

 

类作为成员变量类型

成员变量的类型可以是:基本数据类型或者引用数据类型

 

接口作为成员变量类型

数据类型 变量名;

类是一种数据类型

接口也是一种数据类型

接口作为方法的参数或返回值

传递的是实现类的地址值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值