目录
一、final的使用
二、接口
1.概述
2.与抽象类的异同
3.具体使用
4.内部类
成员内部类
静态内部类
局部内部类
一、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//原因:为了保证在内部类中局部变量作用域的一致性,才自动+finalclass BB{ //外部类的方法体中定义的局部内部类public void test() {System.out.println("局部内部类..."+age);}}new BB().test(); //在外部内的方法体中调用局部内部类功能}
}
public class Test3 {public static void main(String[] args) {new AA().show();}
}