1.final关键字
用法:
-- 修饰一个类:public final class 类名称{}
* 表示该类为最终类,不能由子类但可以有父类。除此与普通类包含的内容不会有区别
-- 修饰一个方法:修饰符 final 返回值类型 方法名(参数列表){}
* 表示该方法为最终方法,不能被覆盖重写,但可被继承
* 对于方法来说,abstract和final关键字不能同时使用,因为abstract修饰的方法必定要被重写
--修饰一个变量:分为局部和成员(全局)
* 局部变量:对于基本类型,指的是变量的数据值不可变
对于引用类型,不可变说的是地址值不可变
* 成员变量:final修饰后,必须手动赋值(否则报错),不会再给默认值。
赋值方式:1.直接赋值;
2.构造方法赋值,无参和有参构造均需进行赋值,且只能使用getXxx成员方法。
2.内部类
成员内部类
格式:
修饰符 class 类名称{
修饰符 class 类名称{
}
}
注意:
1.在类中,内用外,随意访问
-- 为了解决内外方法重名或变量重名,可通过“**外部类名.this.方法名(或成员变量名**)“或使用"**外部类对象.方法名**";
2.在类中,外用内,需要内部类的对象。“**内部类对象.方法名(或成员变量名)**”
3.创建内部类对象格式:**外部类名称.内部类名称 对象名=new 外部类名称().new 内部类名称()**;
局部内部类(含匿名内部类)
局部内部类:
定义在类中的方法中的类,成为局部内部类。其只能在方法中使用,要想使用局部内部类的方法,需要特殊的技巧。
注意:局部内部类访问所在方法的局部变量,这个局部变量必须是有效final的。java8开始,局部变量只要不改变值,final可省。
public class Outer {
public void methodOuter(){
final int num1=20; //方法中的局部变量
class Inner{
int num =10;
public void methodInner(){
System.out.println(num);//10,局部内部类只能在当前方法中使用
}
}
//使用局部内部类,只能在当前方法中使用,使用须在方法中创建局部内部类的对象,使用局部内部类的方法
Inner inner=new Inner();
inner.methodInner();
}
匿名内部类:
本质就是接口的实现类和父类的子类。匿名内部类需覆盖重写所有的抽象方法,匿名内部类中可以定义你自己的方法,但是该方法只能通过子类 调用,父类对象名只能调用抽象方法。
接口名称 对象名 = new 接口名称() {
```
// 覆盖重写所有抽象方法
```
};
|
|