美文网首页
抽象类&接口

抽象类&接口

作者: 竹鼠不要中暑 | 来源:发表于2019-02-14 23:48 被阅读12次

抽象类

抽象方法:

抽象方法是一种特殊的方法,它只有声明,而没有具体的实现,用abstract关键字修饰。

语法:

abstract returnType methodName();

例如:

abstract void eat();

上例eat()中并没有具体的实现语句,就好比,只知道“吃”,而不知道“吃什么”,“怎么吃”。

抽象类

抽象方法使用abstract关键字修饰,可以想见,抽象类也是用abstract关键字修饰。再来,抽象类仍然是个,它也可以有成员变量,构造方法,成员方法等。

而抽象类和抽象方法的关系是:抽象类中不一定有抽象方法,但包含抽象方法的类一定是抽象方法。

  • 语法:
abstract class ClassName {

    abstract returnType methodName();

    returnType methodName(){
        // other method
   }
}
  • 举例:
    打印机作业使用抽象方法,抽象类可以这样写:
// 打印机
public abstract class Printer {
    public abstract void print();
}
// 彩色打印机:
public class ColorPrinter extends Printer {
    @Override
    public void print() {
        System.out.println("我不但很会打印,我还能打印彩色图案嘻嘻");
    }
}
// 黑白打印机:
public class BlackAndWhitePrinter extends Printer {
    @Override
    public void print() {
        System.out.println("我只能打印出来黑白的...");
    }
}

抽象类和普通类的区别

  • 抽象方法必须为public或者protected,缺省情况下默认为public。因为抽象类需要被子类继承,再由子类去实现抽象方法;
  • 抽象类不能用来创建对象:抽象类创建对象其实没有任何意义(因为一般抽象类都有抽象方法,实例一个抽象类,其抽象方法没有被实现,没有意义);
  • 如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为抽象类(abstract)。

接口

接口就是抽象方法的集合。

接口的声明语法:

public interface interfaceName {
    returnType method();
    ...
}

实现语法:

public class className implement iterfaceName {
    public returnType method() {
    // code
    }
    ...
}
  • 举例:
// 打印机
public interface PrinterInterface {
    public abstract void print();
}
// 彩色打印机:
public class ColorPrinter implement PrinterInterface {
    @Override
    public void print() {
        System.out.println("我不但很会打印,我还能打印彩色图案嘻嘻");
    }
}
// 黑白打印机:
public class BlackAndWhitePrinter implement PrinterInterface {
    @Override
    public void print() {
        System.out.println("我只能打印出来黑白的...");
    }
}

接口特性

  • 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
  • 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是public,用 private 修饰会报编译错误)。
  • 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。

上面说到,抽象类和类一样,可以有构造方法,成员方法,成员变量等,那么接口呢?

接口和类的相同点:

  • 一个接口可以有多个方法
  • 接口文件保存在 .java 结尾的文件中,文件名使用接口名。
  • 接口的字节码文件保存在 .class 结尾的文件中。
  • 接口相应的字节码文件必须在与包名称相匹配的目录结构中。

接口和类的不同点:

  • 接口不能用于实例化对象。
  • 接口没有构造方法。
  • 接口中所有的方法必须是抽象方法。
  • 接口不能包含成员变量,除了 staticfinal 变量。
  • 接口不是被类继承了,而是要被类实现,用implement来实现。
  • 接口支持多继承

接口和抽象类的区别

除了上面提到的接口和类的不同点外,接口和抽象类的不同点还有:

  1. 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
  2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
  3. 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
  4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口。

相关文章

  • 抽象类&接口

    抽象类 抽象方法: 抽象方法是一种特殊的方法,它只有声明,而没有具体的实现,用abstract关键字修饰。 语法:...

  • 5.5-全栈Java笔记:接口的定义和使用

    接口interface 接口的作用 为什么需要接口?接口和抽象类的区别? 接口就是比“抽象类”还“抽象”的“抽象类...

  • 建造者模式

    建造者抽象类或接口 建造者抽象类或接口实现类 产品抽象类或接口 产品抽象类或接口实现类 使用

  • Java抽象类 & 接口

    接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法。 抽象类我们都知道在面向对象的领域一切都是对象,同...

  • 代理(委托)模式

    主题抽象类或接口 主题抽象类或接口实际类 主题抽象类或接口代理类 使用

  • 访问者模式

    元素抽象类或接口 元素抽象类或接口实现类 访问者抽象类或接口 访问者抽象类或接口实现类 场景使用

  • Java 接口 抽象类 枚举

    接口 使用接口对行为进行抽象 接口: 抽象类 抽象类是用来捕捉子类的通用特性的,包括属性及行为。 抽象类: 抽象类...

  • 抽象类与接口

    抽象类 一般将父类定义为抽象类。语法如下 接口 接口简介 接口是抽象类的延伸,可以将它看作是纯粹的抽象类,接口中的...

  • 技术问 - 抽象类与接口有什么异同

    抽象类与接口的不同 抽象类与接口的相同

  • 夯实Java基础系列6:一文搞懂抽象类和接口,从基础到面试题,揭

    目录 抽象类介绍为什么要用抽象类一个抽象类小故事一个抽象类小游戏 接口介绍接口与类相似点:接口与类的区别:接口特性...

网友评论

      本文标题:抽象类&接口

      本文链接:https://www.haomeiwen.com/subject/suhueqtx.html