接口与内部类

这个月已过去大半了,都没怎么学习Java。事情多也不能当做借口,按部就班地学习吧。

接口中的所有方法自动地属于public。因此,在借口中声明方法时,不必提供关键字public。

接口绝不能含有实例域,也不能在接口中实现方法。

为了使用Arrays类的sort方法对Employee对象数组进行排序,Employee类就必须实现 Comparable接口。

public interface Comparable<T>

{

int compareTo(T other);

}

在调用x.compareTo(y)的时候,x小于y,返回一个负数;x等于y返回0;否则返回一个正数。

为了让类实现一个接口,通常需要下面两个步骤:

1)将类声明为实现给定的接口; class Employee implements Compareble<Employee>

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

public int compareTo(Employee other)

{

if(salary < other.salary) return -1;

if(salary > other.salary) return 1;

return 0;

}

接口不是类,不能使用new运算符实例化一个接口。然而,尽管不能构造接口对象,却能声明接口变量。

Compareble x; //OK

接口变量必须引用实现了接口的类的对象:

x = new Employee(...);

可以使用instanceof检查一个对象是否实现了某个特定的接口: if(anObject instanceof Compareble){...}

接口也可以继承。

public interface Moveable

{

void move(double x, double y);

}

public interface Powered extends Moveable

{

double milesPerGallon();

}

尽管在接口中不能包含实例域或静态方法,但是可以包含常量。例如:

public interface Powered extends Moveable

{

double milesPerGallon();

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

}

尽管每个类只能够拥有一个超类,但却可以实现多个接口。这也就是抽象类和接口的使用区别。使用逗号将实现的各个接口分隔开。

class Employee implements Cloneable, Comparable

对象克隆

对象变量只是标签,相互赋值只是让多个标签引用同一个对象而已。如果要创建一个对象的新拷贝,就要使用clone方法。

clone是Object类的一个protected方法。它的默认操作是“浅拷贝”,即如果对象中包含了子对象的引用,那么拷贝的结果会使得两个域引用同一个子对象。

对于每一个类,都必须做出下列判断:

1)默认的clone方法是否满足要求。

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

3)是否不应该使用clone。

实际上,选项3是默认的。如果要选择1或2,类必须:

1)实现Cloneable接口。

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

由于默认的clone方法被声明为protected,因此无法直接调用anObject.clone(),必须重新定义clone方法,并将它声明为public。

在这里,Cloneable并没有指定clone方法,这个方法是从Object类继承而来的。接口在这里只是作为一个标记,表明类设计者知道要进行克隆处理。如果一个对象需要克隆,而没有实现Cloneable接口,就会产生一个已检验异常。

即使clone的默认实现(浅拷贝)能够满需求,也应该实现Cloneable接口,将clone重定义为public。

class Employee implements Cloneable

{

public Employee clone() throws CloneNotSupportedException

{

return super.clone();

}

}

下面是一个建立深拷贝clone方法的例子:

class Employee implements Cloneable

{

public object Employee() throws CloneNotSupportedException

{

Employee cloned = (Employee)super.clone();

cloned.hireDay = (Date)hireDay.clone();

return cloned;

}

}

时间: 2024-10-11 03:18:45

接口与内部类的相关文章

第11章 接口与内部类

1.接口的定义和实现2.内部类的使用3.接口和内部类的意义 Java程序设计中的接口,也是一种规范.这个接口定义了类应该做什么?但不关心如何做?即接口中只有方法名,没有具体实现的方法体. 用关键字"interface"来声明. interface school{ void setSchoolName(String schoolName); void setClassName(String schoolClassName);} 类实现接口时要使用implements关键字.class s

接口和内部类

接口的定义:接口不是类,是对类的一组需求描述. 如何实现接口:1.将类声明为实现给定的接口(implements) 2.对接口中的所有方法进行定义(实现) 接口的特性:1)接口变量必须引用实现了接口的类对象 2)可以使用 instanceof 检查一个对象是否实现了某个接口 3)与可以建立类的继承关系一样,接口也可以被扩展 例如:public interface Powerd  extends Moveable 4)接口中不能包含 实例域 和 静态方法,但可以包含常量. 5)接口中的方法 自动被

[Java学习笔记] Java核心技术 卷1 第六章 接口与内部类

第6章 接口与内部类 6.1 接口 一个类可以实现一个或多个接口,并在需要接口的地方,随时使用实现了相应接口的对象. 在接口声明中,方法自动public,可以不写修饰符.在实现接口时必须把方法声明为public. 一个接口中可以包含多个方法,还可以定义常量,自动设置public static final 声明在接口中的内部类自动成为static和public类. 接口中不能含有实例域,也不能在接口中实现方法.提供实例域和方法实现的任务应该由实现接口的那个类来完成. 可以将接口看成是没有实例域的抽

Java面向对象程序设计--接口和内部类

1.接口的定义: In the Java programming language, an interface is not a class but a set of requirements for classes that want to conform the interface. 说明: 1) Interface 不是class,虽然interface具有class的一些特点,例如能够继承,能够定义相同类型的变量,而且和C++的abstract class非常像,但Java 的inter

51CTO大数据学习003-抽象类、接口、内部类

今天学习完了大数据第七天的课程.总结一下抽象类.接口.内部类的内容. 接口的使用,可以降低代码的耦合性,抽象类,体现了Java编程的面向对象特性.Java中只支持单继承,即每个类只能继承一个上级父类,但是可以传递.接口可以实现多个,这也从另外一个角度实现了类的多继承. 实现接口使用关键字implements,抽象类使用abstract关键字.接口中的方法,全是抽象方法,而抽象类中可以有抽象方法,也可以没有抽象方法.抽象类不能实例化.子类继承抽象类,需要实现父类中的抽象方法.接口中的方法,全部都用

Java核心技术 第六章 接口和内部类

Java核心技术  第六章  接口与内部类 接口: 任何实现Comparable接口的类都需要包含compareTo方法,并且这个方法的参数必须是一个Object对象,返回一个整数数值. 在Java SE 5.0中,Comparable接口已经改进为泛型类型. 接口中所有的方法自动的属于public.因此,在接口中声明方法时,不必提供关键字public. 接口中决不能含有实例域,也不能在接口中实现方法. 要让一个类使用排序服务,必须让它实现compareTo方法,因此必须实现Comparable

9.接口与内部类

一.抽象类 不可以被实例化为对象 必须被继承 不能用final修饰 属于后期(动态)绑定 在设计阶段要确定好是否定义抽象类 例子:哺乳动物类 abstruct class buru(){} 2.抽象方法 是不完整的方法,只有声明,但没有方法主体 仅代表一种类型或功能,而不是具体的实现细节 子类必须重写父类的抽象方法 如果不想重写,那子类也必须是抽象类 二.接口 例子:虽然球类和轮胎类没有直接联系,但是可以赋予他们一种通用的行为:弹跳 可以解决单继承的缺陷 接口中的方法也没有方法体body,方法时

【Java总结】final关键字,抽象类,接口,内部类

final final修饰类,表示这个 类不能被继承 final修饰方法,表示这个方法不能被重写 final修饰常量(常量大写),表示常量不能被修改内容 static final修饰的常量,表示全局常量 抽象类 使用abstract修饰的类,这个类是抽象类 使用abstract修饰的方法,为抽象方法,此方法只有生命没有实现 含有抽象方法的类必须是抽象类 抽象类不能实例化,抽象类的子类必须重写父类的抽象方法 不能使用abstract修饰属性,私有方法,构造器,静态方法,final方法 /*我为抽象

Java基础语法&lt;九&gt; 接口与内部类

1 接口  interface implement 接口的所有方法自动地属于public.因此,在接口中声明方法时,不必提供关键字public. 接口可以包含多个方法,接口中可以定义常量.接口中的域将被自动设为public static final. SwingConstants就是只定义了常量,而没有定义方法,任何实现了SwingConstant接口的类都自动地继承了这些常量,并可以在方法中直接地引用一些常量. 1.1 接口的特性 接口不是类,尤其不能使用new运算符实例化一个接口 但是可以声

黑马程序员——JAVA学习笔记四(继承、接口、内部类)

1,    通过extends关键字让类与类之间产生继承关系.多个类中存在相同属性和行为时,将这些内容抽取到单独的一个类中,那么多个类无需定义这些属性和行为,只要继承那个类即可,已存在的类叫做超类,基类,或父类.新类称为子类,派生类,孩子类. 子类可以直接访问父类中的非私有的属性和行为.子类无法继承父类中私有的内容.JAVA不支持多继承,只支持单继承,多实现. 继承提高了代码复用性,让类与类之间产生了关系.为多态提供了前提. 2,    super关键字代表父类中成员变量内存空间的标示.两个作用