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方法,应该交给垃圾回收机制调用。

时间: 2024-11-05 22:01:12

8 面向对象之抽象类+接口+内部类的相关文章

06 面向对象:多态&抽象类&接口&权限修饰符&内部类

多态: /* 多态(polymorphic)概述 * 事物存在的多种形态 多态前提 * a:要有继承关系. * b:要有方法重写. * c:要有父类引用指向子类对象. * 成员变量 * 编译看左边(父类),运行看左边(父类). * 成员方法 * 编译看左边(父类),运行看右边(子类).动态绑定 * 静态方法 * 编译看左边(父类),运行看左边(父类). * (静态和类相关,算不上重写,所以,访问还是左边的) * 只有非静态的成员方法,编译看左边,运行看右边 */ class Demo_Polym

12-14java面向对象之抽象类&接口

抽象类 1.抽象类概念 抽象类:包含抽象方法的类,相比于普通类,他多了一个抽象方法. 抽象方法:只声明但是没有实现的方法,用abstract关键字来定义. 未实现的举例: class A { private String name ; public void print() } 在类中声明的方法,有{}则说明有方法体,则实现:没有{},则未实现. 2.使用规则 包含一个抽象方法的类必须是抽象类 抽象类和抽象方法都使用abstract关键字声明 抽象方法只需要声明不需要实现 抽象类必须被子类继承,

面向对象的理解 抽象类&接口

一.关于面向对象 1.什么是面向对象 在解释面向对象之前,先说说面向过程.学过C的同学都知道,C就是面向过程的一种语言.那什么是面向过程呢?比方说组装主机,对于面向过程,需要从0开始.买cpu,显卡,主板,电源,风扇,把这些都通过主板链接到一起.我需要清楚的知道主机组装的每一个步骤. 介绍了面向过程,再说会正题,什么是面向对象?对于上面的装主机过程面向对象会把主机先抽象成一个机箱,机箱里有cpu,显卡,主板,电源.用主机的人,不关心里面是怎么工作的,也不需要知道内部逻辑,只知道插上电源就能用.面

接口,抽象类与内部类

---恢复内容开始--- 抽象类 语法详解 当一个类中有一个抽象方法,那么他必须是一个抽象类 抽象类不能通过new来创建对象 抽象类可以包含抽象方法,但不是必须 若一个类继承自抽象类,那么他必须实现父类中的抽象方法,或者将自己声明为抽象类. 当一个类声明实现某个或某些接口,但是却没有实现它所有的抽象方法,那么这个类也必须声明为抽象类 接口中的抽象方法必须用public修饰,抽象类中的抽象方法可以用除了private以外的修饰符修饰. 想必接口,抽象类可以包含属性和方法,接口中只能包含抽象方法 抽

黑马程序员_面向对象之抽象类与接口

抽象类(abstract)???? 当编写一个类时,时常会为该类定义一些方法,这些方法的使用用以描述该类的行为方式,那么这些方法都有具体的方法体.但是在某些情况下,某个父类只是知道子类应该包含怎样的放过,但是无法精确的知道这些子类是如何实现这些方法,例如定义一个GetTime类,该类提供了一个计算某一段程序运行时间的gettime方法,但是无法知道具体运行什么方法体,这时就需要使用抽象方法来实现了. 抽象类概念 当多个类中出现相同功能,但是功能主体不同,这时候可以进行向上抽取,只抽取功能定义,而

黑马程序员_Java抽象类和内部类

- - - - - android培训.java培训.期待与您交流! - - - - - - 类(class) 类是相似对象中共同属性和方法的集合体 在面向对象中定义类,就是在描述事物,就是在定义属性(变量)和行为(方法).属性和行为共同成为类中的成员(成员变量和成员方法). 封装.继承和多态 面向对象方法中软件设计的主体是类,类是相同属性和方法的封装体,因此类具有封装性 子类可以在继承父类所有属性和方法的基础上,再增加自己特有的属性和方法,因此类具有继承性 在一个类层次中,定义为根类的对象可被

普通类 抽象类 接口

首先得搞懂什么是抽象类:一.概念:    在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样.并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类.    比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆.三角形这样一些具体概念.它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念.正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的

虚函数/纯虚函数/抽象类/接口/虚基类

1.多态 在面向对象语言中,接口的多种不同实现方式即为多态.多态是指,用父类的指针指向子类的实例(对象),然后通过父类的指针调用实际子类的成员函数. 在Java中,没有指针,就直接用父类实例化子类对象 多态性就是允许将子类类型的指针赋值给父类类型的指针,多态是通过虚函数实现的,多态可以让父类的指针有“多种形态”,这是一种泛型技术. 所谓泛型技术,就是试图使用不变的代码来实现可变的算法 2.虚函数 在基类的类定义中,定义虚函数的一般形式: Virtual 函数返回值类型 虚函数名(形参表){ 函数

面向对象多态之接口

申明下:我也是新手,以下如有不对或不合适的地方望指出,一起交流O(∩_∩)O哈! 好了,转入正题 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace Interface 7 { 8 class InterfaceTest 9 { 10 static void Main(string[] args) 11 { 12 #region 测试