8 面向对象之抽象类+接口+内部类
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.Arrays类 sort(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方法,应该交给垃圾回收机制调用。
以上是关于8 面向对象之抽象类+接口+内部类的主要内容,如果未能解决你的问题,请参考以下文章