MODULE 12 面向对象
- 知道final修饰成员之后特点
- 会使用静态代码块以及知道静态代码块的使用场景
- 会使用匿名内部类
一.权限修饰符
(一)概述
在Java中提供了四种访问权限,使用不同的访问权限修饰符修饰时,被修饰的内容 会有不同的访问权限
(1)public:公共的,最高权限,被public修饰的成员,在哪里都能访问
(2)protect:受保护的
(3)default:默认的,不可以将default写出来
(4)private:私有的,只能在自己的类中直接访问
(二)不同权限的访问能力
Public具有最大权限,private有最小权限
编写代码时,如果没有特殊考虑,建议这样使用权限:
(1)属性:用private -> 封装思想
(2)成员方法:public -> 便于调用
(3)构造public -> 便于new对象
二.final关键字
1.概述:最终的
2.使用:
(1)修饰一个类
(2)修饰一个方法
(3)修饰一个局部变量
(4)修饰一个成员变量
(5)修饰一个对象
3.怎么学final:只需要知道被final修饰之后特点是啥即可
(一)final修饰类
1.格式:
public final class 类名{}
2.特点:
被final修饰的类不能被继承
(二)final修饰方法
1.格式:
修饰符 final 返回值类型 方法名(形参){
方法体
return 结果
}
2.特点:
被final修饰的方法,不能被重写
3.注意
final 和abstract不能同时修饰一个方法
(三)final修饰局部变量
1.格式:
final 数据类型 变量名 = 值
2.特点:
被final 修饰的变量不能二次赋值
(四)final修饰对象
1.格式:
final 数据类型 对象名 = new 对象();
2.特点:
被final修饰的对象,地址值不能改,但是对象中的属性值可以改变
(五)final修饰成员变量
1.格式
final 数据类型 变量名 = 值
2.特点:
(1)需要手动赋值
(2)不能二次赋值
三.代码块
(一)构造代码块
1.格式
{
代码
}
2.执行特点:优先于构造方法执行,每new一次,就会执行一次
(二)静态代码块
1.格式:
static{
代码
}
2.执行特点:
静态代码块优先于构造代码块和构造方法执行的,而且只执行一次
(三)静态代码块使用场景
如果想让一些数据,而且只需要初始化一次,就可以将这些数据放到静态代码块中
四.内部类
1.什么时候使用内部类:
当一个事物的内部,还有一个部分需要完整的结构去描述,而这个内部的完整 结构又只为外部事物提供服务,那么整个内部的完成结构最好使用内部类
2.在java中允许一个类的定义位于另外一个类的内部,前者称为内部类,后者称为 外部类
class A{
class B{
}
}
3.分类
成员内部类(静态,非静态)
局部内部类
匿名内部类(重点)
(一)静态成员内部类
1.格式:直接在定义内部类的时候加上static关键字
public class A{
static class B{
}
}
2.注意:
(1)内部类可以定义属性,方法,构造等
(2)静态内部类可以被final或者abstract修饰
被final修饰之后,不能被继承
被abstract修饰后,不能new
(3)静态内部类不能调用外部的非静态成员
(4)内部类可以被四种权限修饰符修饰
3.调用静态内部类成员:
外部类.内部类 对象名 = new 外部类.内部类()
(二)非静态成员内部类
1.格式:直接在定义内部类的时候加上static关键字
public class A{
class B{
}
}
2.注意:
(1)内部类可以定义属性,方法,构造等
(2)静态内部类可以被final或者abstract修饰
被final修饰之后,不能被继承
被abstract修饰后,不能new
(3)静态内部类不能调用外部的非静态成员
(4)内部类可以被四种权限修饰符修饰
3.调用非静态内部类成员:
外部类.内部类 对象名 = new 外部类().new 内部类()
外部类的成员变量和内部类的成员变量以及内部类的局部变量重名时,怎么区分?
(三)局部内部类
1.局部内部类基本操作
(1)可以定义在方法中,代码块中,构造中
2.局部内部类实际操作
(1)接口类型作为方法参数传递和返回
A.接口作为方法参数,传递实参时,传递的是实现类对象
B.接口作为返回值返回,实际返回的是实现类对象
(2)抽象类作为方法参数和返回值
A.抽象类作为方法参数,传递实参时,传递的是其子类对象
B.抽象类作为返回值返回,实际返回的是其子类对象
(3)普通类做方法参数和返回值
A.普通类作为方法参数传递,传递的是对象
B.普通类作为方法返回值返回,返回的是对象
(4)局部内部类实际操作
(四)匿名内部类(重点)
所谓的匿名内部类,可以理解为没有显示声明出来的内部类
1.问题描述:我们如果想实现接口吗,简单使用一次抽象方法,我们就需要创建一个 实现类,实现这个接口,重写抽象方法,还要new实现类对象,所以我们在想如果就 单纯的想使用一次接口中的方法,我们能不能不这么麻烦?
(1)创建实现类,实现接口
(2)重写方法
(3)创建实现类对象
(4)调用方法
2.如果就想单纯的使用一下接口中的方法,我们没必要经过以上四步,可以四合一
3.匿名内部类怎么学:就按照一种格式,这一种格式就代表了实现类对象或者子类 对象
4.格式:
new 接口/抽象类(){
重写方法
}.重写的方法();
========================================
类名 对象名 = new 接口/抽象类(){
重写方法
}
对象名.重写的方法();
(1)匿名内部类复杂用法_当参数传递
(2)匿名内部类的复杂用法_当返回值返回
5.什么时候使用匿名内部类:
当简单调用一次接口中的方法,我们就可以使用匿名内部类
6.将一种格式化代表实现类对象或者子类对象来看待学习
7.匿名内部类会编译生成的不用管,我们只需要利用咱们讲的格式去new对象,调 用重写的方法即可
标签:12,内部,静态,面向对象,修饰,new,方法,final From: https://www.cnblogs.com/swh666/p/18397222