13、面向对象编程-4

    技术2025-11-13  24

    一、final和抽象类

    1、final作用

    修饰变量:被final修饰的变量是常量 修饰基本数据类型:只能赋值一次修饰引用数据类型:对象不能被赋值,但属性可以修改 修饰方法:被final修饰的方法不能被重写修饰类:被final修饰的类不能被继承

    2、抽象类

    注意:

    有抽象方法的类只能定义成抽象类抽象类不能实例化,即不能用new来实例化抽象类。抽象类必须有构造方法,创建子类对象的时候使用一个抽象类至少0个抽象方法,至多(所有的方法都是抽象方法)个抽象方法子类必须重写父类的抽象方法,不重写就提示编译错误;或者子类也定义为抽象类

    二、接口

    1、使用要点:

    声明:权限修饰符 interface 接口名接口中的方法是抽象方法一个类实现了接口,必须实现接口内的方法,否则变为抽象类一个类实现了接口,此类可以作为此接口的子类存在一个类可以实现多个接口,必须实现各个接口中的方法,否则变为抽象类一个接口可以继承多个接口 ,实现此接口的类,必须实现各个接口内的方法 ,否则变为抽象类接口中的变量 是全局静态常量,默认被 public staic final 修饰接口内的方法 默认被 public abstract 修饰接口不能创建实例

    2、接口应用

    内部比较器:

            图书类、学生类、新闻类、商品类等是不同的类,可是却都需要有比较的功能,怎么办?共同的父类不可以,可以定义一个比较接口Comparable,其中定义一个实现比较的方法compareTo(Object obj)。让各个类实现该接口即可。

    3、接口新特征

    jdk1.8及以后

    接口中可以添加非抽象方法(static),实现类不能重写,只能通过接口名调用。接口中可以添加非抽象方法(default),实现类可以重写,只能通过对象名调用。

    jdk1.9

    接口中可以定义private的非抽象方法。便于将多个方法中的冗余代码进行提取,并且不对外公开。减少冗余、也实现了代码隐藏。

    4、面向接口编程

    接口就是规范,就是项目中最稳定的核心! 面向接口编程可以让我们把握住真正核心的东西,使实现复杂多变的需求成为可能。

    通过面向接口编程,而不是面向实现类编程,可以大大降低程序模块间的耦合性,提高整个系统的可扩展性和和可维护性。

    三、内部类

    1、非静态成员内部类

    内部类可以直接访问外部类的成员(变量/方法)外部类不能直接访问内部类的成员,需要先创建对象再通过对象名访问内部类访问外部类的同名成员变量:OuterClass.this.num必须先创建外部类的对象,才能创建内部类的对象。格式:OuterClass.InnerClass = new OuterClass().new InnerClass;非静态内部类不能有静态方法、静态属性和静态初始化块。

    2、静态成员内部类

    静态内部类只能够访问外部类的静态成员静态内部类访问外部类的同名成员变量:OuterClass.name;静态内部类属于整个外部类的。创建静态内部类的对象,不需先创建外部类的对象;创建内部类对象格式:OuterClass.InnerClass = new OuterClass.InnerClass();外部类可以通过类名直接访问内部类的静态成员

    3、局部内部类

    局部内部类访问所在方法的局部变量,要求局部变量必须使用final修饰。JDK1.8中final可以省略,但是编译后仍旧会加final。

    4、匿名内部类

    匿名内部类可以实现一个接口,也可以继承一个类(可以是抽象类)。匿名内部类只能实现一个接口,而不是多个必须实现所有的方法,匿名内部类不能是抽象类匿名内部类不可能有构造方法,因为类是匿名的匿名内部类没有访问修饰符

    四、虚拟机和垃圾回收

    1、虚拟机构成

    虚拟机:类加载器、运行时数据区、执行引擎、本地(native)方法接口、本地方法库、垃圾回收器。

    运行时数据区:方法区(元空间metaspace)、堆区、虚拟机栈、本地方法栈、程序计数器。

    2、垃圾回收

    垃圾回收机制主要是回收JVM堆内存里的对象空间。垃圾回收发生具有不可预知性,程序无法精确控制垃圾回收机制执行。finalize:垃圾被回收前,最后调用的方法。但永远不要主动调用某个对象的finalize方法,应该交给垃圾回收机制调用。

     

    Processed: 0.016, SQL: 9