第6篇 Java中的接口与抽象类

接口 Interface

在JAVA编程语言中是一个抽象类型,是抽象方法的集合。接口通常以interface来声明。一个类通过实现接口(implements)的方式,从而实现接口的抽象方法。

  • 接口通过interface关键字来定义
  • 接口中不能实现方法,但是能声明方法
  • 类通过implements关键字来实现接口
  • 一个类如果实现了接口,就必须实现接口中的所有方法
  • 一个类可以通过implements关键字实现多个接口,但只能继承一个父类
  • 面向接口的多态(接口的引用指向其实现类)
  • 接口不能被实例化
  • 接口中的方法都是抽象方法
  • 接口中一般没有属性,有则必须被声明为pulic static & final形式(不声明编译器自动设置为 public static final类型)

接口与类的区别

  • 接口不能实例化对象
  • 接口没有构造方法
  • 接口中所有方法必须是抽象方法
  • 接口不能包含成员变量,除非是public static final变量
  • 接口不是被类继承了,而是要被类实现
  • 接口支持多继承(接口与接口之间只能是继承extends的关系,可以多继承)

抽象类与接口的区别

  • 抽象类中可以普通方法和抽象方法共存
  • 抽象类中可以有各种类型的成员变量
  • 接口中不能含有静态方法,抽象类中可以有
  • 一个类只能继承一个抽象类,却可以实现多个接口

接口的声明

(想了想还是菜鸟教程的声明写的好看些)

[可见度] interface 接口名称 [extends 其他的类名] {
        // 声明变量
        // 抽象方法
}

接口的实现

类在实现接口时必须实现接口的所有方法。

接口可以实现多态的功能。

示例

interface USB{
    public void connect();
}
//鼠标类实现USB接口
class Mouses implements USB{

    @Override
    public void connect() {
        System.out.println("鼠标连接USB");
    }
}
//键盘类实现USB接口
class KeyBoard implements USB{

    @Override
    public void connect() {
        System.out.println("键盘连接USB");
    }
}

我们可以通过下面的方法来实现不同对象对接口的实现:

public static void useUSB(USB usb) {
    usb.connect();
}

public static void main(String[] args) {
    Mouses mouses = new Mouses();
    KeyBoard keyBoard = new KeyBoard();
    useUSB(mouses);
    useUSB(keyBoard);
}

通过给useUSB方法来传入不同的USB接口对象,从而达到多态的效果。最后打印结果如下:

鼠标连接USB
键盘连接USB

接口的继承

这里由于老师上课并没有重点提,不过在后面集合一章就是很明显的例子。

迭代器接口:

public interface Iterable<T> {
    /**
     * 迭代器的一些方法
     */

  ......
}

Collection 接口:

public interface Collection<E> extends Iterable<E> {

    /**
     * Collection 的一些方法
     */

  ......

}

List 接口:

public interface List<E> extends Collection<E> {

    /**
     * List 的一些方法
     */

  ......
}

接口的多继承

接口的继承与类的继承一点很大的区别就在于接口可以多继承,多继承的方式与类实现多个接口的形式类似:

public interface Hockey extends Sports, Event

Java 抽象类(面试)

用·abstract修饰的类叫做抽象类

抽象类的一些特点

  • 抽象类不能被实例化,只能实例化抽象类的子类。
  • 抽象类不一定包含抽象方法,但包含抽象方法的类一定是抽象类
  • 构造方法不能被声明成抽象方法
  • 子类必须父抽象类的所有抽象方法,除非子类也是抽象类
  • 用abstract修饰的方法称之为抽象方法,抽象方法只有方法声明,没有方法体
  • 抽象类中的方法可以是抽象方法,也可以是普通方法
  • 没有抽象的属性,属性不能被abstract修饰

原文地址:https://www.cnblogs.com/JuanF/p/9272922.html

时间: 2024-08-28 11:47:46

第6篇 Java中的接口与抽象类的相关文章

JAVA中的接口和抽象类(转)

在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类往往用来表征我们在对问题领域进行分析. 设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象,我们不能把它们实例化(拿不出一个具体的东西)所以称之为抽象. 比如:我们要描述“水果”,它就是一个抽象,它有质量.体积等一些共性(水果有质量),但又缺乏特性(苹果.橘子都是水果,它们有自己的特性),我们 拿不

分清java中的接口和抽象类

抽象是面向对象设计的几大特点之一,在Java语言中的体现则是抽象类和接口.这两者十分的相似,想很多初学者甚至接触Java几年的人也很难分清他们.今天笔者在查看集合类相关的代码的时候,发现了有部分是接口如List.Map等,有部分是抽象类如AbstractList.AbstractSet等,由于对两者不是十分的清楚,比较迷惑.所以今天笔者在本文则主要介绍下这两者的区别. 抽象类 抽象方法 利用abstract修饰只有声明没有实现的方法,叫做抽象方法.如: abstract void fun();

JAVA中的接口和抽象类

在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类往往用来表征我们在对问题领域进行分析. 设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象,我们不能把它们实例化(拿不出一个具体的东西)所以称之为抽象. 比如:我们要描述“水果”,它就是一个抽象,它有质量.体积等一些共性(水果有质量),但又缺乏特性(苹果.橘子都是水果,它们有自己的特性),我们 拿不

interface,abstract class,abstract interface Java中的接口,抽象类和抽象接口的异同

接口与抽象类的比较 1.相同点: A. 两者都是抽象类,都不能实例化. B. interface实现类及abstrct class的子类都必须要实现已经声明的抽象方法. 2. 不同点: A. interface需要实现,要用implements,而abstract class需要继承,要用extends. B. 一个类可以实现多个interface,但一个类只能继承一个abstract class. C. interface强调特定功能的实现,而abstract class强调所属关系. D.尽

java中的接口深层理解

深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然.今天我们就一起来学习一下Java中的接口和抽象类.下面是本文的目录大纲: 一.抽象类 二.接口 三.抽象类和接口的区别 若有不正之处,请多多谅解并欢迎批评指正,不甚感激. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.

Java中InvocationHandler接口中第一个参数proxy详解

java动态代理机制中有两个重要的类和接口InvocationHandler(接口)和Proxy(类),这一个类Proxy和接口InvocationHandler是我们实现动态代理的核心: 1.InvocationHandler接口是proxy代理实例的调用处理程序实现的一个接口,每一个proxy代理实例都有一个关联的调用处理程序:在代理实例调用方法时,方法调用被编码分派到调用处理程序的invoke方法. 看下官方文档对InvocationHandler接口的描述: {@code Invocat

为什么Java中有些接口没有任何方法

由于Java不支持多重继承,即一个类只能有一个父类,为了克服单继承的缺点,Java语言引入了接口这一概念.接口是抽象方法定义的集合(接口中也可以定义一些常量值),是一种特殊的抽象类.接口中只包含方法的定义,没有方法的实现.接口中的所有方法都是抽象的.接口中成员的作用域修饰符都是public,接口中的常量值默认使用public static final修饰.由于一个类可以实现多个接口,因此通常可以采用实现多个接口的方式来间接的达到多重继承的目的. 在Java语言中,有些接口内部没有声明任何方法,也

Java中Comparator接口

Comparator位于java.util包下 public interface Comparator<T> 强行对某个对象 collection 进行整体排序 的比较函数.可以将 Comparator 传递给 sort 方法(如 Collections.sort 或 Arrays.sort),从而允许在排序顺序上实现精确控制.还可以使用 Comparator 来控制某些数据结构(如有序 set或有序映射)的顺序,或者为那些没有自然顺序的对象 collection 提供排序. 当且仅当对于一组

java中业务接口

今天写完业务层在抽取接口的时候脑子里突然产生了一个问题:抽取接口到底有什么用呢? 在刚刚学习接口的时候知道接口是为了实现java的多继承,但是现在每一个业务类都要抽取一个接口,每当该类需要增加方法的时候还要到接口中增加方法,也就是两份,这个时候感觉维护接口增加了工作量,想来想去也不知道为什么这么做,反正看到别人都是这么做的.为什么呢?在网上找了好多例子,有好多说的是为了后面扩展,也举了例子,也看懂了,但是想想现在做的项目,把每一个业务抽取一个接口,是不是有点过了呢?等待解答..... java中