zoukankan      html  css  js  c++  java
  • 8 面向对象之抽象类+接口+内部类

    1 final关键字

       用法:

      1)使用final修饰变量,该变量就变成常量,在运行的过程中无法重新赋值。

        2)使用final修饰方法,该方法无法在子类中重写

        3)使用final修饰的类,不能被继承(派生其他子类)

      JDK中常见的final修饰的类: java.lang.Math   java.lang.String

    2 抽象类和抽象方法

      抽象方法:使用abstract修饰的方法。特征: 没有方法体。

      抽象类:使用abstract修饰的类。

     特点:

      1)抽象类中可以包含抽象方法。包含抽象方法的类一定是抽象类,但抽象类中不一定包含抽象方法。

      2)抽象类中可以存在属性,方法,构造方法。

      3)抽象类不能实例化(不能使用new关键字创建对象),但可以在子类调用构造方法。

      作用: 通过抽象类,可以避免子类设计的随意性。

      抽象类就是为被继承而生的。子类一旦继承了抽象类,就必须重写抽象类中的抽象方法,或者子类本身也是一个抽象类。

    3 设计模式

       1)单例模式

      单例模式:保证一个类只能有一个实例。

      特征:构造方法私有化,提供一个静态的方法获取实例

      常见的实现方法: ①饿汉式:使用时再创建对象。②懒汉式:加载时创建对象。

       2)简单工厂模式

      简单工厂模式又叫静态工厂方法,可以通过其生成产品,可以降低因生成生成产品而导致的耦合性过强。(解耦合)

      工厂模式的命名:xxxFactory--->生成xxx

       如何实现工厂模式:

       1.编写父类和子类或接口和实现类

       2.编写静态的工厂方法,返回值类型为父类或接口。--->多态

       3.根据用户的需求动态创建子类的实例,并返回。

    4 接口

    4.1接口定义和特点

      定义: 使用interface关键字

        [修饰符] interface 接口名 [extends 父接口1,父接口2...]{

           //常量的声明

           //方法的声明

         }

       接口成员的特点:

       1)接口中所有的成员变量是常量,默认修饰符为public static final

       2)接口中所有的方法都是抽象方法,默认修饰符为:public abstract

       3)接口不能实例化,接口不能构造方法(抽象类不能实例化,但可以有构造方法)

       4)java类是单继承,但接口可以是多继承

       5)一个非抽象类实现实现接口,必须重写接口中的抽象方法,抽象类实现接口可以重写部分抽象方法。

       6)一个类只能继承一个父类,但可以实现多个接口

      如果一个类继承父类并实现了接口如何编写?

         [修饰符] class 类名 [extends 父类名 implements 接口名1,接口名2..]{

         }

          public class E extends D implements A,B{

         }

    4.2 Comparable接口

      java.lang.Comparable接口:此接口强行对实现它的每个类的对象进行整体排序。

      排序规则在compareTo()方法中定义。当调用java.util.Arrays类中sort(Object[] objs)时,程序会调用compareTo()方法对对象进行比较,

      如果该方法返回正整数(1)时,代表当前对象大于待比较对象;如果返回0,代表当前对象等于待比较对象;如果该方法返回负整数(-1)时,代表当前对象小于待比较对象。

      实现思路:

      1)实现Comparable接口,并重新其compareTo方法

      2)compareTo方法中定义比较规则。返回值应该是正整数,零和负整数。

      3)在调用Arrays.sort(Object[] objs)方法的过程中,sort方法的内部对调用compareTo方法进行比较。

    4.3 Comparator接口

        java.util.Comparator接口:比较器

      int compare(Object o1, Object o2):比较用来排序的两个参数。根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。

      java.util.Arrayssort(Object[] objs,Comparator c):按照指定的比较器对指定数组进行排序。

    5 内部类

      定义:将一个类定义置入另一个类定义中就叫作“内部类”

        特点:

      1)内部类可以访问外部的成员,但外部类不能访问内部的成员。

        2)外部类的修饰符只有两种:public和默认,而内部类的修饰符可以是public,protected,默认,private

        3)内部类成员只有在内部类的范围之内是有效的。

        4)用内部类定义在外部类中不可访问的属性。这样就在外部类中实现了比外部类的private还要小的访问权限。

      内部类的分类:成员内部类,静态内部类,方法内部类,匿名类。

      成员内部类:将一个类作为另外一个类的成员。

      静态内部类:使用static修饰的内部类。静态内部只能访问外部的静态成员。

      方法内部类:在方法中定义的内部类。如果方法内部类中需要访问方法中局部变量,该局部变量必须使用final修饰。

      匿名内部类:没有名称的内部类,可以实现一个接口或继承一个父类。适合创建那种只需要一次使用的类,不能重复使用。匿名内部类要使用外部类的局部变量,必须使用final修饰该局部变量。

    6 java垃圾回收机制

      Java语言不需要程序员直接控制内存回收,是由JRE在后台自动回收不再使用的内存,程序员无法精确控制,称为垃圾回收机制(Garbage Collection)

      GC机制的优点:

      1)提高编程效率,摈弃了C/C++中的指针,避免因遗忘释放内存而导致的内存泄漏。

      2)保证了程序的完整性。

      3)降低性能开销。

      GC原理:JVM中有一个线程专门用于回收堆内存中不使用对象,常用的方法:

      1)定时扫描堆中不使用的对象

      2)通过计数控制回收时机。

      垃圾回收机制只回收JVM堆内存里的对象空间,对其他物理连接,比如数据库连接、输入流输出流、Socket连接无能为力。

      垃圾回收发生具有不可预知性,程序无法精确控制垃圾回收机制执行。

      可以将对象的引用变量设置为null,暗示垃圾回收机制可以回收该对象。

      程序员可以通过System.gc()或者Runtime.getRuntime().gc()来通知系统进行垃圾回收,会有一些效果,但是系统是否进行垃圾回收依然不确定。

    垃圾回收机制回收任何对象之前,总会先调用它的finalize方法(如果覆盖该方法,让一个新的引用变量重新引用该对象,则会重新激活对象)。

      永远不要主动调用某个对象的finalize方法,应该交给垃圾回收机制调用。

  • 相关阅读:
    Python基础语法 第2节课(数据类型转换、运算符、字符串)
    python基础语法 第5节课 ( if 、 for )
    python基础语法 第4节课 (字典 元组 集合)
    Python基础语法 第3节课 (列表)
    A. Peter and Snow Blower 解析(思維、幾何)
    C. Dima and Salad 解析(思維、DP)
    D. Serval and Rooted Tree (樹狀DP)
    C2. Balanced Removals (Harder) (幾何、思維)
    B. Two Fairs 解析(思維、DFS、組合)
    D. Bash and a Tough Math Puzzle 解析(線段樹、數論)
  • 原文地址:https://www.cnblogs.com/nicepanda/p/6978874.html
Copyright © 2011-2022 走看看