day11_final、权限、内部类、引用类型

2020年2月24日

1 final关键字

1.1概述

子类可以在父类的基础上改写父类的内容,例如方法重写。为了避免随意改写的情况,java提供了final关键字,用于修饰不可改变的内容

final:不可改变。

  • 类:被修饰的类,不能被继承
  • 方法:被修饰的方法,不能被重写
  • 变量:被修饰的变量,不能被重新赋值

1.2 使用方式

修饰类

查询API可以发现,像public final class Stringpublic final class Mathpublic final class Scanner等类都是被final修饰的,目的是供我们使用,所以不让我们改变其内容。

修饰方法

格式:

修饰符 final 返回值类型 方法名(参数列表){}

重写被final修饰的方法时,编译会报错

修饰变量

  1. 局部变量——基本类型

基本类型的局部变量,被final修饰后,只能赋值一次,不能再更改

  1. 局部变量——引用类型

只能指向一个对象,地址值不能再更改,但是不影响对象内部的成员变量值的修改

  1. 成员变量

成员变量涉及到初始化的问题,初始化的方式只能二选一:

  • 显示初始化
  • 构造方法初始化

被final修饰的常量名称,所有字母都大写,字母之间用_分隔

2 权限修饰符

2.1 概述

Java中有四种访问权限。

  • public:公共的
  • protected:受保护的
  • default:默认的
  • private:私有的

2.1 不同权限的访问能力

public protected default private
同一类中
同一包中(子类与无关类)
不同包的子类
不同包中的无关类

3 内部类

3.1 概述

将一个类A定义在另一个类B里面,里面的那个类A称为内部类,B称为外部类

3.1.1 成员内部类

定义在类中方法外的类

Class Car{//外部类
    Class Engine{//内部类
    }
}

在描述事务时,如果一个事务内部还包含其他事物,就可以使用内部类这种结构,比如汽车类Car中包含发动机类Engine,此时Engine就可以用内部类来描述,定义在成员位置

访问特点

  • 内部类可以直接访问外部类的成员,包括私有成员
  • 外部类要访问内部类的成员,必须要建立内部类对象

创建内部类对象的格式:

外部类名.内部类名 对象名 = new 外部类型().new 内部类型();

内部类仍然是一个独立的类,在编译之后会在内部类被编译成独立的.class文件,但是前面冠以外部类的类名和$符号

1.2 匿名内部类【重点】

  • 匿名内部类:本质是一个带具体实现的父类或父接口的匿名的子类对象。开发中,最常用到的内部类就是匿名内部类。以借口举例,在使用一个接口时,需要定义子类、重写接口中的方法、创建子类对象、调用重写后的方法。如果目的只是为了调用方法,就可以将这四步合成一步。

前提

匿名内部类必须继承一个父类或者实现一个父接口

格式

new 父类名或接口名(){
    //方法重写
    @override
    public void method(){
        //执行语句
    }
};

等号右边是匿名内部类,定义并创建该接口的子类对象

等号左边是多态赋值,接口类型引用指向子类对象

通常在方法的形式参数是接口或者抽象类时,也可以将匿名内部类作为参数传递

4 引用类型用法总结

在实际开发中,引用类型的使用非常重要,也非常普遍。基本类型可以作为成员变量、方法参数、方法返回值,引用类型也同样可以。

4.1 class作为成员变量

类作为成员变量时,对它进行赋值的操作,实际上,是赋给它该类的一个对象

4.2 interface作为成员变量

接口是对方法的封装

使用一个接口作为成员变量,可以随时更换技能,这样的设计更加灵活,增强了程序的拓展性。接口作为成员变量时,对它进行赋值的操作,实际上,是赋给它一个实现类对象。

4.3 interface作为方法参数和返回值类型

当接口作为方法的返回值和方法参数,返回和传递的都是它的子类对象。ArrayList类是java.util.List接口的实现类。所以,当我们看到List接口作为参数或返回值类型,可以将ArrayList的对象进行传递和返回。

猜你喜欢

转载自www.cnblogs.com/ningdeblog/p/12363494.html
今日推荐