JAVA程序设计--抽象类和接口(三)

本文探讨了Java中的抽象类和接口,强调了它们在大型项目中的重要性和规范性。接口作为理清业务和命名规范的工具,提高了维护和拓展性,并确保了系统的安全和严密性。讲解了Comparable接口用于对象比较和排序,以及实现Comparable接口的好处。同时,介绍了Cloneable接口,表明实现此接口的类可被克隆。文章提供了相关代码示例和编译错误分析。
摘要由CSDN通过智能技术生成

接口

搬运:

1、重要性:在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力。

  2、简单、规范性:如果一个项目比较庞大,那么就需要一个能理清所有业务的架构师来定义一些主要的接口,这些接口不仅告诉开发人员你需要实现那些业务,而且也将命名规范限制住了(防止一些开发人员随便命名导致别的程序员无法看明白)

  3、维护、拓展性:比如你要做一个画板程序,其中里面有一个面板类,主要负责绘画功能,然后你就这样定义了这个类。

         可是在不久将来,你突然发现这个类满足不了你了,然后你又要重新设计这个类,更糟糕是你可能要放弃这个类,那么其他地方可能有引用他,这样修改起来很麻烦。

         如果你一开始定义一个接口,把绘制功能放在接口里,然后定义类时实现这个接口,然后你只要用这个接口去引用实现它的类就行了,以后要换的话只不过是引用另一个类而已,这样就达到维护、拓展的方便性。

  4、安全、严密性:接口是实现软件松耦合的重要手段,它描叙了系统对外的所有服务,而不涉及任何具体的实现细节。这样就比较安全、严密一些(一般软件服务商考虑的比较多)。

接口只包含常量和抽象方法,不能使用new操作符创建接口的实例!!也无构造方法!!!

UML图里,接口名字和方法名字使用斜体!

虚线和空心三角形指向接口!

特性:接口中定义的所有方法都是public。当一个类实现接口时,该方法必须声明为公共的抽象实例方法!!!且所有变量必须是public static final!!

Show the error in the following code:

    interface A {
      void m1();
    }

    class B implements A {
      void m1() {
        System.out.println("m1");
      }
    }
public加在void m1()前面!!



Comparable接口

Java为两个不同类对象可以互相比较,提供了以下方法:

public interface Comparable<E> {
public int compareTo(E o);
}

由于所有Comparable对象都有compareTo方法,如果对象是Comparable接口类型的实例的话,JavaAPI中的java.util.Arrays.sort(Object[])方法就可以使用compareTo方法了对数组中的对象进行比较和排序了。


练习:

下面代码可以被编译么?

 Integer n1 = new Integer(3);
    Object n2 = new Integer(4);
    System.out.println(n1.compareTo(n2));

答:不能,N1是一个Integer对象,其比较方法需要Interger参数,但N2被声明为Object。编译器将引发错误。


下面代码有什么错误?

public class Test {
      public static void main(String[] args) {
        Person[] persons = {new Person(3), new Person(4), new Person(1)};
        java.util.Arrays.sort(persons);
      }
    }

    class Person {
      private int id;

      Person(int id) {
        this.id = id;         
      }
    }

答:Person没实现Comparable接口,person数组不能用sort方法进行比较。


实现Comparable接口的好处是:

通过实现这个接口,类的对象可以直接传递给需要Comparable类型的方法。



Cloneable接口

Cloneable接口给出了一个可克隆的对象。

Cloneable接口定义如下:

public interface Cloneable{
}

这个接口是空的,一个带空体的接口称为标记接口。用来表示拥有特定的属性。实现Cloneable接口的类标记为可克隆的,而且它的对象可以使用在Object类中定义的clone()方法克隆。


实例:

Calendar calendar= new GregorianClaendar(2013,2,1);
Calendar calendar2=(Calendar)calendar.clone();

System.out.println("calendar==calendar2is"+(calendar==calendar2));

System.out.println("calendar.equals(calendar2)is"+calendar.equals(calendar2));

输出:

calendar == calendar1 is true;
calendar .equals (calendar2) is true;
因为 equals看内容不看引用!!!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值