javaweb-final、权限、内部类-006

目录

final

修饰类

修饰内部方法

修饰局部变量

final修饰成员变量

权限修饰符

四种权限修饰符

内部类

类对象内部使用

外部调用内部类间接方法

直接调用

假如类成员变量,内部类成员变量,内部类局部变量重名

方法内部类

只有方法才能使用它,但是他可以使用自己,间接调用

权限修饰符的使用规范

局部类的使用方法的局部变量要求

匿名内部类

匿名对象方法使用

第四章 引用类型用法总结 

类作为数据类型存在

接口作为引用类型存在,当作 成员变量,可以用来扩展,毕竟还有方法未实现,充满着其他可能性

接口作为返回值和参数类型:


final

为了避免随意改写的情况,Java提供了 final 关键字,
用于修饰不可改变内容。
final: 不可改变
类:被修饰的类,不能被继承。
方法:被修饰的方法,不能被重写。
变量:被修饰的变量,不能被重新赋值。

修饰类

查询API发现像 public final class String 、 public final class Math 、 public final class Scanner
等,很多我们学习过的类,都是被final修饰的,目的就是供我们使用,而不让我们所以改变其内容。 

修饰内部方法

修饰局部变量

此处对象的地址不再发生变化,但是地址指向的内容可以改变

public class FinalDemo2 {
    public static void main(String[] args) {
        // 创建 User 对象
        final User u = new User();
        // 创建 另一个 User对象
        u = new User(); // 报错,指向了新的对象,地址值改变。
        // 调用setName方法
        u.setName("张三"); // 可以修改
    }
}

final修饰成员变量

被final修饰的常量名称,一般都有书写规范,所有字母都大写。 

权限修饰符

四种权限修饰符

编写代码时,如果没有特殊的考虑,建议这样使用权限:
成员变量使用 private ,隐藏细节。
构造方法使用 public ,方便创建对象。
成员方法使用 public ,方便调用方法。

内部类

一个类只有在另一个类内部才有作用。

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

人,心脏,动力

成员内部类 :定义在类中方法外的类。

class 外部类 {
    class 内部类{
    }
}

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

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

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

变量定义位置不影响调用,他是先编译的,后运行

类对象内部使用

成员内部类
成员内部类 :定义在类中方法外的类。

外部调用内部类间接方法

直接调用

假如类成员变量,内部类成员变量,内部类局部变量重名

方法内部类

只有方法才能使用它,但是他可以使用自己,间接调用

权限修饰符的使用规范

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

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

局部类的使用方法的局部变量要求

存在区域不同,final,局部对象比局部变量生命长,因此是把局部    变量内容复制过来,即使其消失,也能使用正确的不变的数据

匿名内部类

匿名内部类 :是内部类的简化写法。它的本质是一个 带具体实现的 父类或者父接口的 匿名的 子类对象。

成员内部类,局部内部类,局部内部类中的匿名内部类(常用)  

匿名对象方法使用

 很容易理解,匿名内部类是继承了接口,正常流程是继承接口创建子类,子类重写内部方法体,子类再创建对象,对象再调用方法,匿名内部类则是一步到位,直接根据接口重写了方法体并立即调用

匿名对象则是已经有了相关的类,隐藏的步骤比匿名内部类少,很合理吧

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

 也可以直接简化

第四章 引用类型用法总结 

类作为数据类型存在

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

而一个对象具备的数据结构和方法是及其丰富的,这为复杂和简洁带来了可能

接口作为引用类型存在,当作 成员变量,可以用来扩展,毕竟还有方法未实现,充满着其他可能性

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

作为成员变量,依然具有函数性质,使用内部方法

        上面是常规操作,先创建接口,然后创建类重写方法体,然后根据类创建对象,另外一个类再创建新的对象,然而这些步骤可以简化,可以使用匿名内部类简化对象创建操作,对接口实例化

进一步简化

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

接口作为返回值和参数类型:

这里以list举个例子,arraylist是对象,源代码里接口有list

当接口作为方法的参数时,需要传递什么呢?当接口作为方法的返回值类型时,需要返回什么呢?对,其实都是它的子类对象。

ArrayList 类我们并不陌生,查看API我们发现,实际上,它是 java.util.List 接口的实现类。所以,当我们看见 List 接口作为参数或者返回值类型时,当然可以将 ArrayList 的对象进行传递或返回。

也就是说当接口作为方法参数时刻,接收的参数和返回的参数就是他的子类对象,这个其实就是向下转型,很合理吧 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值