您的位置:首页 > 编程语言 > Java开发

Java复习笔记(7)——接口和内部类

2016-12-15 15:00 351 查看
接口

1、在Java程序设计语言中,接口不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义。

2、接口中的所有方法自动地属于public。

3、接口绝对不能含有实例域,也不能在接口中实现方法。提供实例域和方法实现的任务应该由实现接口的那个类来完成。

4、使用implements关键字使类实现一个接口。

5、接口不是类,尤其不能使用new运算符实例化一个接口:

x = new Comparable(...) // ERROR

6、然而,尽管不能构造接口的对象,却能声明接口的变量:

Comparable x; // OK

7、可以使用instanceof检查一个对象是否实现了某个接口。

8、类似于建立类的继承关系,接口也可以被扩展。允许存在多条从具有较高通用性的接口到较高专用性的接口的链:

public interface Movable {

void move(double x, double y);

}

public interface Powered extends Moveable {

double milesPerGallon();

}

9、在接口中可以包含常量,接口中的域会被自动设置为public static final。

public interface Powered extends Moveable {

double milesPerGallon();

double SPEED_LIMIT = 95; // a public static final constant.

}

10、每个类只能有一个超类,但是可以实现多个接口。

11、接口可以提供多重集成的大多数好处,同时还能避免多重集成的复杂性和低效性。

12、Java默认的克隆操作时浅拷贝,它并没有克隆包含在对象中的内部对象。

13、进行对象克隆操作时,需要作出下列判断:

① 默认的clone方法能否满足需求。

② 默认的clone方法是否能够通过调用可变子对象的clone得到修补。

③ 是否不应该使用clone。

如果要选择①和②,类必须:

① 实现Cloneable接口。

② 使用public访问修饰符重新定义clone方法。

14、Cloneable是一个标记接口(tagging interface),接口中不包含方法,使用它的唯一目的是可以用instanceof进行类型检查。

15、所有的数组类型均包含一个clone方法,这个方法被设为public,而不是protected。可以利用这个方法创建一个包含所有数据元素的拷贝的新数组:

int[] luckyNumbers = {2, 3, 5, 7, 11, 13};

int[] cloned = luckNumbers.clone();

cloned[5] = 12; // doesn’t change luckyNumbers[5];

内部类

1、内部类(inner class)是定义在另一个类中的类。

2、定义内部类主要基于以下三个原因:

① 内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据

② 内部类可以对同一个包中的其他类隐藏起来。

③ 当想要定义一个回调函数且不想编写大量的代码时,使用匿名内部类比较便捷。

3、内部类既可以访问自身的数据域,也可以访问创建它的外围类的对象的数据域。

4、内部类中可以使用外围类的引用,表达式OuterClass.this表示外围类的引用。

5、在外围类的作用域之外,可以这样引用内部类:OuterClass.InnerClass。

new OuterClass().new InnerClass();
6、可以在方法内部定义局部类,局部类不能用public或private访问说明符进行声明。它的作用域被限定在这个局部类的块中。

7、局部类可以访问final修饰的局部变量。

8、定义匿名内部类:

new
SuperType(construction parameters) {

inner class and data;

}

9、匿名类不能有构造器,取而代之的是,将构造器参数传递给超类构造器。尤其是内部类实现接口的时候,不能有任何构造参数:

new
InterfaceType() {

methods and data;

}

10、双括号初始化:

new ArrayList<String>() {

{

add(“Harry”);

add(“Tony”);

}

11、有时候,使用内部类知识为了把一个类隐藏在另外一个类的内部,并不需要内部来引用外围类对象。为此,可以将内部类声明为static,一遍取消产生的引用,这样就定义了一个静态内部类
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息