final关键字、内部类、四种权限修饰符

    科技2023-10-01  72

                                                       Final关键字

    1、fianl修饰一个类:格式:public final class 类名称{//},这个类不能有任何的子类。

    2、final修饰一个方法:格式:public final 返回值类型 方法名称(参数列表){//方法体},该方法不能被子类覆盖重写。对于类和方法来说abstract和final不能同时使用,因为矛盾。

    3、final修饰一个局部变量:格式:final 数据类型 变量名 = 数值。该变量不能进行改变,一次赋值终身不变。对于基本类型来说不可变就是变量中的数据不变,对于引用类型来说,不可变就是变量中的地址值不可变。

    4、final下修饰一个成员变量:格式等同于局部变量,但是由于成员变量具有默认值,所以用了final之后必须手动赋值,要么直接赋值,要么通过构造方法赋值(二者选其一)。

                                                 四种修饰符的访问权限

     

    Public

    Protected

    Default

    Private

    同一个类

    yes

    yes

    yes

    Yes

    同包不同类

    Yes

    yes

    yes

    no

    不同包子类

    yes

    yes

    no

    No

    不同包非子类

    yes

    no

    no

    no

    权限修饰符修饰类时:

    外部类:public/default

    成员内部类:四种都行。

    局部内部类:不使用权限修饰符。

                                                    内部类

    1、分类:成员内部类、局部内部类(包含匿名内部类)。

    2、成员内部类:

    格式:修饰符 class 外部类{修饰符 class 内部类{}}。

    内用外,随意访问;外用内需要内部类对象。

    使用成员内部类的两种方式:

    a.间接方式:在外部类的方法中,使用内部类,然后main只是调用外部类的方法。

    b.直接使用:外部类名称.内部类名称 对象名 = new 外部类名称().new 内部类名称();

            在内部类中如何访问外部类的同名变量:外部类名称.this.外部类成员变量。

    3、局部内部类:

            格式:修饰符 class 外部类名称{修饰符 返回值类型 外部类方法名(参数列表){ class 内部类名称{}}}

            局部内部类只能在包含他的方法中才能使用,出了方法就不能用了。

            局部内部类,如果希望访问所在方法的局部变量,那么这个局部变量必须是有效final的(即局部变量需要保持不变或者添加final修饰符)。原因:new出来的对象在堆内存中,而局部变量是跟着方法走的,在栈内存中,方法运行结束后立刻出栈局部变量跟着消失,但是内部类对象会持续存在,直到垃圾回收。

    4、匿名内部类:

            格式:父类(接口名称)对象名 = new 父类(接口名称)(){//实现重写所有抽象方法。};

            适用场景:当接口的实现类或者父类的子类,只需要使用唯一的一次,那么这种情况下就可以省略该类的定义,改为使用匿名内部类。

     

     

    Processed: 0.023, SQL: 8