java学习(8)

来源:互联网 发布:dg加密软件 编辑:程序博客网 时间:2024/06/03 18:50

不好意思再说自己是自学java了,因为最近突然开了一门java课,接下来这个系列就不写小的细节,光写我觉得不熟悉的地方了。


接口

可以用instanceof来判断对象是否实现了相应的接口比如

res = a instanceof B

和类的区别:

尽管每个类只能够拥有一个超类,但却可以实现多个接口。这就为定义类的行为提供了极大的灵活性。

作用:主要用来描述类具有什么功能,而并不给出每个功能的具体实现。

一个类可以实现(implement)一个或多个接口,并在需要接口的地方,随时使用实现了相应接口的对象。


定义:在java中,接口不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义。

例子:

Arrays类中的sort方法承诺可以对对象数组进行排序,但要求满足下列前提:

对象所属的类必须实现了Comparable接口

public interface Comparable

{

   int cimpareTo(Object other);

}

任何实现Comparable接口的类都需要包含compareTo方法,并且这个方法的参数必须是一个Object对象,返回一个整型数值。

接口中的所有方法自动的属于public


如果希望通过Arrays类的sort方法对Employee对象数组进行排序,Employee类就必须实现Comparable接口

(1)将类声明为实现给定的接口

(2)对接口中的所有方法进行定义

class Employee implements Comparable

Employee类需要提供自己的compareTo方法(假设是以薪水作为评判标准)

public int compareTo(Object otherObject)

{

     Employee other = (Employee)otherObject;

     return Double.compare(salary,other.salary);

}

需要谨记的是,如果要实现sort,一定要实现Comparable接口



对于自定义类的clone,如果说他不能够使用默认的clone方法,那么我们就应该

(1)实现Cloneable接口

(2)使用public访问修饰符重新定义clone方法

clone方法其实是从Object继承来的,接口在这里起到的只是标记的作用


接口与回调

回调:指出某个特定事件发生时应该采取的动作。

java.swing包中有一个Timer类,可以使用它在到达给定的时间间隔时发出通告。


内部类

使用内部类的原因:

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

(2)内部类可以对同一个包中的其他类隐藏起来

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


对于(1)

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

为了能够运行这个程序,内部类的对象总有一个隐式引用,它指向了创建它的外部类对象。


只有内部类可以是私有类,这样就只有他的外部类能够构造他的对象。而常规类只可以具有包可见性,或公有可见性。

内部类的特殊语法规则:

OuterClass.this



局部内部类

局部类不能用public或private访问说明符进行声明,它的作用域被限定在声明这个局部类的块中。

其他类也不能够访问他,除了他定义的方法以外,没有任何方法知道TimePrinter类的存在。


局部类的优点:

他们不仅能够访问包含他们的外部类,还可以访问局部变量(不过这些局部变量必须被声明为final)









0 0
原创粉丝点击