final、权限、内部类、引用类型的介绍

本文详细介绍了Java中的final关键字,包括final如何修饰类、方法和变量,以及其在防止继承和方法重写中的作用。同时,讲解了Java的访问权限修饰符,如public、protected、default和private,以及它们对类、方法和变量访问的影响。此外,还简单提及了内部类的概念及其访问特点。
摘要由CSDN通过智能技术生成

什么是final关键字
概述
在继承中,我们知道,子类可以在父类的基础上改写父类内容,比如,方法重写。那么我们能不能随意的继承API中提供的类,改写其内容呢?显然这是不行的。为了避免这种随意改写的情况,Java提供了 final 关键字,用于修饰不可改变内容。
final:

不可改变。可以用于修饰类、方法和变量。
类:被修饰的类,不能被继承。
方法:被修饰的方法,不能被重写。
变量:被修饰的变量,不能被重新赋值
使用方式:

final class 类名 {
}
查询API发现像 public final class String 、 public final class Math 、 public final class Scanner等,很多我们学习过的类,都是被final修饰的,也就是我们只能使用不能改变

修饰方法格式如下:
修饰符 final 返回值类型 方法名(参数列表){
    //方法体
}
重写被 final 修饰的方法,编译时就会报错

修饰变量(变量分为基本类型和引用类型)
局部变量——基本类型
基本类型的局部变量,被final修饰后,只能赋值一次,不能再更改。代码如下:

//被final修饰的变量只能赋值一次
public class FinalDemo1 {
    public static void main(String[] args) {
        // 声明变量,使用final修饰
        final int a;
        // 第一次赋值
        a = 10;
        // 第二次赋值
        a = 20; // 报错,不可重新赋值
        
        // 声明变量,直接赋值,使用final修饰
        final int b = 10;
        // 第二次赋值
        b = 20; // 报错,不可重新赋值
    }
}

局部变量——引用类型
引用类型的局部变量,被final修饰后,只能指向一个对象,地址不能再更改。但是不影响对象内部的成员变量值的修改,代码如下:

public class finalDemo2{
    //创建一个Cat对象
    final Cat c=new Cat();
    //使用c创建另外一个对象(报错)
    //c=new Cat();
    
    //给对象属性赋值
    c.name="AISMALL";
    //修改属性的值
    c.name="AISMALL_01";
}
//定义个一类
class Cat{
    public String name;
}

什么是权限修饰符
在Java中提供了四种访问权限,使用不同的访问权限修饰符修饰时,被修饰的内容会有不同的访问权限,
public:公共的。
protected:受保护的
default:默认的
private:私有的

不同权限的访问能力


 可见,public具有最大权限。private则是最小权限。
编写代码时,如果没有特殊的考虑,建议这样使用权限:
成员变量使用 private ,隐藏细节。
构造方法使用 public ,方便创建对象。
成员方法使用 public ,方便调用方法。
注意:不加权限修饰符,其访问能力与default修饰符相同

什么是内部类?
概述
将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类。

成员内部类
成员内部类 :定义在类中方法外的类,即一个类是另一个类的成员
定义格式:

class 外部类{
    class 内部类{
    }
}
访问特点

内部类可以直接访问外部类的成员,包括私有成员。(暂时可以把内部类想象成一个成员变量)。

外部类要访问内部类的成员,必须要建立内部类的对象。
创建内部类对象格式:

外部类名.内部类名 对象名 = new 外部类型().new 内部类型();
内部类仍然是一个独立的类,在编译之后会内部类会被编译成独立的.class文件,但是前会加上外部类的类名和$符号 。

比如:Province$City.class

匿名内部类 :是内部类的简化写法。它的本质是一个带具体实现的 父类或者父接口的匿名的子类对象。
开发中,最常用到的内部类就是匿名内部类了。以接口举例,当你使用一个接口时,似乎得做如下几步操作,

定义接口的子类
在子类中重写接口的抽象方法
创建子类对象
调用重写后的方法
 引用类型用法总结:

基本类型可以作为成员变量、作为方法的参数、作为方法的返回值,那么当然引用类型也是可以的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值