Java - 抽象与接口

抽象:

  1. 抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。

  2. 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。

  3. 抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。

  4. 构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。

  5. 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。

抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法的声明格式为:

//拥有抽象方法,类也必须是抽象类。但并不意味着抽象类智能有抽象方法,也可也有普通方法
//因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象
public abstract abstractTest{
      abstract void fun();
}

\color{red}{注意:抽象类和普通类的主要有三点区别:}

1、抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。
2、抽象类不能用来创建对象;
3、如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。在其他方面,抽象类和普通的类并没有区别。

接口:

接口泛指供别人调用的方法或者函数。从这里,我们可以体会到Java语言设计者的初衷,它是对行为的抽象。在Java中,定一个接口的形式如下:

public interface interfaceTest(){
}

接口中可以含有 变量和方法。但是要注意,接口中的变量会被隐式地指定为public static final变量(并且只能是public static final变量,用private修饰会报编译错误),而方法会被隐式地指定为public abstract方法且只能是public abstract方法(用其他关键字,比如private、protected、static、 final等修饰会报编译错误),并且接口中所有的方法不能有具体的实现,也就是说,接口中的方法必须都是抽象方法。从这里可以隐约看出接口和抽象类的区别,接口是一种极度抽象的类型,它比抽象类更加“抽象”,并且一般情况下不在接口中定义变量。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 抽象方法和抽象类(abstract) 抽象方法和抽象类使用 abstract 来定义,有抽象方法的类必须被定义为抽...
    AshengTan阅读 579评论 0 1
  • 本文出自 Eddy Wiki ,转载请注明出处:http://eddy.wiki/interview-java.h...
    eddy_wiki阅读 1,228评论 0 5
  • 抽象类 抽象类和抽象方法必须用abstract修饰 抽象类不能被实例化 抽象类有默认构造方法 有抽象方法毕为抽象类...
    尘瀚阅读 327评论 0 0
  • 整理来自互联网 1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具...
    Ncompass阅读 1,555评论 0 6
  • 夜幕渐渐拉开,从办公室出来的小婉,一个人漫无目的地走在大街上。 迎面走来一个乞丐,手里的杯子在小婉的面前簸了两下,...
    玖月冬暖阅读 148评论 1 2