抽象类和接口(备忘)

来源:互联网 发布:centos 7 nodejs 安装 编辑:程序博客网 时间:2024/06/01 14:46

1、抽象类

(1) 使用了abstract关键字所修饰的类叫做抽象类,抽象类无法实例化;

(2) 使用abstract关键字所修饰的方法叫做抽象方法,抽象方法只有声明,没有实现;

(3) 一个抽象类中可以有抽象方法,也可以有具体方法,但是一个有抽象方法的类,一定是抽象类;

(4) 在子类继承父类的情况下,子类必须实现父类的所有抽象方法,否则该类也要声明为抽象类,就是用abstract关键字修饰该类。

2、接口

(1)声明为interfacte的类为接口,比抽象类更加抽象的一种机制,java不可以多继承,但可以实现(implements)多个接口,间接地实现了多继承。

(2)特征:

² Java接口中的成员变量默认都是public 、static、final类型的(都可以省略),必须被显示初始化,即接口中的成员变量为常量(大写、单词之间用“_”分隔);

² 接口中的成员方法默认都是public、abstract类型(都可以省略),没有方法体,不能被实例化;

² 接口中没有构造方法,不能实例化;

² 一个接口不能实现(implements)另一个接口,但它可以继承多个其他接口;

² 接口是构建松耦合软件系统的重要法宝,它仅仅描述系统能做什么,但不指明如何去做。

3、接口与抽象类比较

相同点

不同点

接口

1、都代表系统的抽象层,当一个系统使用一颗继承树上的类时,应该尽量把引用变量声明为继承树的上层抽象类型,这样可以提高两个系统之间的松耦合;

2、都不能被实例化;

3、都包含抽象方法,这些抽象方法用于描述系统能提供哪些服务,但不提供具体的实现。

² 它所有的方法都是抽象的;

² 一个类可以实现多个接口;

² 接口一旦制定,就不允许随意更改,否则对外面使用者及系统本身会造成影响。

抽象类

² 可以有具体方法;

² 用抽象类来定制系统中的扩展点。

4、内部类

v 内部类的意思就是将类的定义放在另一个类的内部。内部类可以访问外部类私有的成员。

v 内部类相当于一个普通的变量,哪怕是private权限,也一样直接调用,因为它们在同一个类中。

v 接口解决了部分问题,而内部类有效地实现了“多重继承”,一般情况,内部类不宜过长,否则就会显得头重脚轻。

v 每个内部类都能独立继承自一个接口,和外部类没有任何关系(不论外部类是否实现了该接口)。

4.1、在外部类的非静态方法中创建内部类的实例(实际上跟我们平常创建实例一样,用new就可以了)


4.2、在内部类的非静态方法中创建外部类的实例(使用外部类,this来创建外部类的实例),当然也可以用new 来创建


4.3、在外部类的静态方法中创建外部类的实例(直接通过new来创建)


4.4、在外部类的静态方法中创建内部类实例:

(1)内部类为静态的:它是在外部类的静态方法中创建,然后调用的。当然还可以直接new就行,就是把静态的内部类当成非静态的一般类处理


(2)内部类为非静态的


4.5、匿名内部类的创建:实际上就是实现了接口A,只不过是以另一种方式实现的。