从零开始学Java

第10章  接口和内部类
接口是为了解决无法实现多重继承而提供的一个解决方案,接口与类的定义比较类似,但是接口中没有具体的方法实现,就像是没有进行装修的房子一样,只有一个外壳方法和公有的静态方法。一个类可以通过接口来实现多重继承。
10.1  接口
接口在Java中是一项比较重要的接口,它是一系列抽象方法和常量的属性集合,一个类如果实现了接口,就必须要实现接口中所定义的所有方法,而且一个类可以实现多个接口。实际上,接口只是一个类的框架,是一种完全形式上的抽象类。
10.1.1  接口的概述
接口是一种特殊的抽象类。前面介绍的抽象类中的方法只提供方法的原型,没有任何的方法实现。子类必须提供父类父类中的抽象方法的实现方式。接口和抽象类一样,也可以定义抽象的费那个发。并且在接口中只能够包含抽象方法和常量。不能够有变量、初始化块和构造函数。
当创建一个借口的时候,这个借口中的方法必须是抽象方法,也就是说接口不提供具体的实现,它只是用来指定要做什么,而不去规定怎么做。定义了一个接口之后,任何的类都可以实现这个接口,而且一个类可以去实现多个接口。在接口中只能够去定义常量和抽象方法,而且需要使用关interface来进行修饰。
10.1.1  接口的概述
在定义接口的时候,需要注意一下几点:
1.首先是设置接口的修饰符,接口的修饰符只有两种选择,即默认无修饰符和public两种。如果没有修饰符,则说明接口包是可见的,在接口所在的包之外的类不可以使用该接口。如果修饰符是public,则说明任何的类都可以使用该接口。
2.接口的名称设定需要满足Java标识符的规定。
3.接口内可以对变量进行声明,接口内的变量会被设置成共有的、静态的和最终的字段
4.接口定义的方法都为抽象的,它们被自动的设置为public的。
10.1.2  接口的实现
所谓接口的实现,就是实现接口的类。在接口声明的时候,只给出了抽象方法,也就是打好了框架。实现接口需要实现接口中所定义的所有方法。接口的实现是指具体实现接口的类。接口的声明仅仅给出了抽象方法,相当于事先定义了程序的框架。实现接口的类必须要实现接口中定义的方法。
10.1.2  接口的实现
由关键字表示实现的接口,多个接口之间用逗号隔开。实现接口需要注意以下几点:
(1)为接口中的所有方法提供具体的实现。
(2)必须遵守重写的所有规则。
(3)保持相同的返回类型。
10.1.3  接口的应用
Java中规定在接口中的变量要具有public、static和final属性,也就是说,在接口中只能够声明一个常量,而不可以声明一个变量。这样一来就可以保证实现该接口的所有类可以访问的相同的常量,
10.2  内部类
内部类是定义于类内部的类,内部类是一种非常有用过的机制,通过内部类的定义,程序员将一些逻辑上相关的类组织在一起,并且通过内部类的使用可以很好的控制内部类的可见性。
10.2.1  内部类概述
在Java中,一个类被嵌套定义在另一个类中,那么这个类就被称为是内部类,包含内部类的类就被称为外部类。对于外部类来说,内部类相当于成员变量或者是方法。创建一个内部类和创建一个普通的类没有多大的区别,唯一不同的就是内部类是定义在类的内部。
10.2.3  继承内部类
前面介绍了引用外部类的对象,内部类需要用到外部类的引用,就需要继承一个内部类,这样,就必须要解决内部类所对应的外部类引用初始化的问题。
10.2.4  静态内部类
一般情况下内部类会隐性持有一个指向外部类的引用,由此就可以直接去访问外部类的一些成员,如果不需要让内部类持有这个类的话,就需要将内部类设置为静态的属性。
静态内部类和普通股内部类的区别,普通内部类的变量和方法不能够被定义成静态内部类,也不能包含静态内部类。但是静态内部类却可以包含这些元素。
10.2.5  引用外部类的对象
如果需要在内部类中引用外部类的this指针,需要使用方法名.this的格式,如下所示:
print().this
10.3  小结
在本章中主要介绍了接口和内部类,并在最后介绍了对象克隆的相关知识。接口是Java实现程序灵活性和多态性的重要手段,读者应该注意区分接口和抽象类直接的不同点和相同点,以加强对面向对象思想的理解。内部类是Java提供的一种特殊的语法结构。

原文地址:https://www.cnblogs.com/yoogoo/p/2467268.html