目录
一、final的使用
描述:final是最终的,不可改变的含义;可以修饰在类,方法,变量中
修饰类: 该类不能被继承
修饰方法:该方法不能被重写
修饰变量:变量变为常量
1.修饰成员变量--成员常量
赋值方式:a.直接赋值 b.动态代码块 c.构造方法
2.修饰静态变量--静态常量(状态值-做判断)
赋值方式:a.直接赋值 b.静态代码块
3.修饰局部变量
a.基本类型局部变量:值不可变b.引用类型局部变量:地址不可变
二、接口
1.概述
描述:接口是特殊的抽象类;
特殊性:可以看成抽象的事物;没有继承关系,但是有相应的应用场景---多态
接口中的方法也是抽象的,需要通过实现类来完成
定义接口:interface 接口名 定义实现类: 类 implements 接口
2.与抽象类的异同
相同点:
都可以生成class文件
都不能实例化对象
可以作为引用类型来使用(多态)
都可以调用Object(祖宗类)的方法--继承性
不同点:
接口中定义的属性都是公开的静态常量
接口中定义的方法都是公开的抽象方法
接口中不能有构造方法,没有动态代码块和静态代码块
3.具体使用
面向接口的好处:扩展性,维护性更强; 更容易更换具体实现;解耦合性更强
耦合性:类与类的联系很紧密;解耦合就是为了让类之间的关系更独立一些---代码分离性更好
接口传参多态,与抽象类传参多态类似;就是将接口引用通过参数形式接收实现类对象;
哪个实现类对象传给接口引用,接口引用则调用该实现类重写方法-----接口回调
接口实现多态的应用场景2:传参的多态---作为某种标准或约定来使用
结论:接口的应用就是多态的应用,参考抽象类实现多态即可
4.内部类
概述:在一个类的内部,又包含了一个完整的类;这个完整的类就是内部类
特点:
内部类也会生成独立的class文件
在内部类中可使用外部类的私有成员,而不破坏封装性
可以将外部类的一些功能交给内部类来完成
内部类可以分为:成员内部类,静态内部类,局部内部类(了解), 匿名内部类(常用)
成员内部类
//将外部内的求和功能交给内部类来完成
class Outter{ //外部类
private String name="张三疯";
public int add(int a,int b) {
return new Inner().addFun(a,b);
}
class Inner{ //成员内部类
private String name="张无忌";
//private static int age; //在成员内部类中不能使用static;除非静态常量
public int addFun(int a, int b) {
//可以直接使用外部类的私有成员; 重名时作用域小的优先
System.out.println(name); //张无忌
System.out.println(Outter.this.name); //张三疯
return a+b; //场景:将某些功能,交给内部类完成
}
}
}
public class Test1 {
public static void main(String[] args) {
//Outter out = new Outter();
//System.out.println(out.add(1, 2)); //调用外部类方法,完成功能
//直接调内部类的方法: 通过外部类对象才能new内部类
Outter.Inner inner = new Outter().new Inner();
System.out.println(inner.addFun(2, 3));
}
}
静态内部类
描述:在内部类中加static修饰
import com.qf.d_inner.A.B; //需要导入静态内部类的包
//静态内部类案例
class A{
private int age = 30; //外部类的私有成员
static class B{ //静态内部类
static String name; //在静态内部类中,可以定义静态成员
public void show() {
//System.out.println(age); //静态内部类中,不能使用外部类属性--加载时机
System.out.println("静态内部类中的方法调用");
}
}
}
public class Test2 {
public static void main(String[] args) {
//实例化静态内部类方式1:
A.B b = new A.B(); //static的资源需要类来调
b.show();
//简化方式:
B b2 = new B();
b2.show();
}
}
局部内部类
描述:局部内部类,就是在外部类的方法体中定义的内部类;在外面无法调用,只能在当前方法体中调用
局部内部类不能加public修饰
class AA{
public void show() {
//局部内部类--不常用,外部调不出来
int age = 3; //在局部内部类中使用局部变量时会变为常量+final
//原因:为了保证在内部类中局部变量作用域的一致性,才自动+final
class BB{ //外部类的方法体中定义的局部内部类
public void test() {
System.out.println("局部内部类..."+age);
}
}
new BB().test(); //在外部内的方法体中调用局部内部类功能
}
}
public class Test3 {
public static void main(String[] args) {
new AA().show();
}
}