目录


抽象类

一个类,如果有抽象方法(没有方法体),则该类必须被限定为抽象类(abstract);当然,我们也可以创造出一个没有任何抽象方法的抽象类,仅仅是我们不想它产生对象;

抽象类中,依然是有构造器的,只是我们不能创造对象 ;但是,它跟普通类并没有多大区别,比如,抽象类可以有静态方法,我们也可以直接通过类名使用它的静态方法 ;

跟普通类,其实没差,就多了一项:可以用抽象方法 ;


抽象类的方法的权限;

上文讲了,其实抽象类跟普通类,没差,就多了一项:可以用抽象方法 ;

那么,抽象类的域和方法的权限,基本 就像普通类那样,根本就没啥特别的,没有啥 默认权限,不像下面的接口那样,总有一些默认的权限,烦的一比 !

唯一需要注意的,就是有的权限不能和 abstract 一起用

  1. private 因为 抽象方法 需要被子类重写,而定义为私有,子类访问不到,将无法重写。
  2. static 因为定义为 static 可以通过类名直接调用该方法,而 抽象方法 连方法体都不存在,更谈不上被调用执行了。
  3. final 因为 final 修饰的方法只能被继承,不能被覆盖,而 抽象方法 必须被覆盖。
  4. 我们发现 ,限定都在 abstract 上,而 abstract 只能修饰方法,不能修饰 字段,因此,抽象类 的权限,完全跟普通类一样;

只要把上面的几点想明白,就不用去死记那些权限 ;


接口

抽象类,是可以部分抽象;那接口就是完全抽象,不允许提供任何方法体 ;

一个类实现了某个接口,是允许向上转型为接口类型的,这样,就可以实现 java多继承 了, 因为,java 里面虽然不能直接多继承,但是可以通过实现多个接口,达到多继承的目的 ;

由于接口,本身就是需要类来实现的;多个类,可以实现同一个接口,因此接口可以看做是类与类之间建立的协议 ;


接口中的方法的权限;

接口中可以包含域;所有的域都是隐式的被指定为 public、static、final

而接口中的方法,默认是 public、abstract 权限的;

并且由于接口中没有方法体,方法都需要类来实现,因此,接口中的方法,不能是 final 权限,因为 final 权限,代表不可以覆盖,而接口中方法,必须覆盖 ;

而接口中东西,都是需要被其他类访问到,因此,不能有 private

算了,记住好了 ;

接口本身自己,有两种修饰权限:可以在前面加上 public,那么就可以跨包访问;如果不加 public,则为包访问权限 ;

对了,接口中不能有 空白final


实现多个接口

实现多个接口的时候,可以向上转型为其中任意一个接口 ,给我们很大的灵活性 ;

实现多接口的时候,当多个接口中有相同方法签名的方法时,实现类只需要 实现一个即可

这样有一个小问题,就是实现多个接口的时候,如果有方法的方法签名一样,但是返回值不同;是无法直接区分这样的情况的,需要使用一定的技巧,内部类 来完成这样的操作 ;


接口继承

在接口继承体系中,一样的方法,只看做一个 ;


接口嵌套

  • 类中嵌套接口把它当做类的成员变量即可,访问权限跟普通成员变量一致 ;

    当接口被修饰为 private 的时候,该接口只能在本类中实现,并且实现的类,只能本在类中使用 ;

    1. public class Test1 {
    2. // 修饰为 private
    3. private interface MyTest{
    4. void print();
    5. }
    6. // 不能在外部实现该接口
    7. class MyTestImpl implements MyTest{
    8. @Override
    9. public void print() {
    10. System.out.println("aha !");
    11. }
    12. }
    13. @Test
    14. public void test() {
    15. new MyTestImpl().print();
    16. }
    17. }

  • 接口与接口之间嵌套

    一个类实现的接口, 假如这个接口中嵌套了其他接口,嵌套的接口 中的方法是不需要实现的

    1. public interface BB {
    2. public interface AA{
    3. void mmm() ;
    4. }
    5. void sss();
    6. }
    7. -------------------------------------------
    8. class BBimpl implements BB{
    9. @Override
    10. public void sss() {
    11. System.out.println("ssss");
    12. }
    13. }

抽象类 and 接口的更多相关文章

  1. 抽象类 VS 接口

    引言 接口和抽象类是面向对象编程(OOP, Object Oriented programming)中两个绕不开的概念,二者相似而又有所不同.接下来,我们来了解二者的概念并比较它们的异同. 什么是抽象 ...

  2. java抽象类和接口

    面向对象设计过程中重要的一点是如何进行抽象,即把"问题空间"中的元素与"方案空间"中的元素建立理想的一对一的映射关系.抽象类和接口便是抽象过程中的产物.     ...

  3. php中抽象类与接口的概念以及区别

    php里面的接口类,抽象类到底有什么用呢? 刚接触php的时候,觉得这个东西没什么用,其实这些东西还是有一定的作用的,下面我就简单的说说. 1.php 接口类:interface 其实他们的作用很简单 ...

  4. Java 抽象类与接口

    接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是 Java 语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予 Java 强大的面向对象的能力.他们两者之间对 ...

  5. 浅谈我对C#中抽象类与接口的理解

    C#中的抽象类与接口有些相似,初学者很容易混淆,今天就让我来谈谈对二者的理解. 首先我们得明确二者的含义,分述如下: 如果一个类不与具体的事物相联系,而只是表达一种抽象的概念,仅仅是作为其派生类的一个 ...

  6. Atitit 深入理解抽象类与接口 attilax总结

    Atitit 深入理解抽象类与接口 attilax总结 1.1. 主要区别接口侧重于动作抽象..抽象类是属性名词抽象..1 1.2. 抽象层次类>>抽象类>>接口1 1.3. ...

  7. luogg_java学习_07_抽象类_接口_多态学习总结

    这篇博客总结了半天,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 , 抽象 一种专门用来做父类,被继承的. (模板) 格式: abs ...

  8. PHP中抽象类,接口定义

    这里先介绍接口,因为在我最近看的好几本php工具书中都没有提到抽象类. 本人也觉得,在理解了接口后抽象类也非常好理解. 例子代码随便写了一下.例子代码是很ok的,测试过了不会报错,懒得看代码的筒靴们看 ...

  9. 0026 Java学习笔记-面向对象-抽象类、接口

    抽象方法与抽象类 抽象方法用abstract修饰,没有方法体部分,连花括号都不能有: 抽象方法和抽象类都用abstract修饰 包含抽象方法的类一定是抽象类:但不包含抽象方法的类也可以是抽象类 不能创 ...

  10. Java抽象类与接口的区别

    很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题.本文我们将仔细讨论这些话题. 在讨论它们之间的不同点之前,我们先看看抽象类.接口各自的特性. ...

随机推荐

  1. FF,NF,BF

    设计一个可变式分区分配的存储管理方案.并模拟实现分区的分配和回收过程. 对分区的管理法可以是下面三种算法之一: 首次适应算法 循环首次适应算法 最佳适应算法 对于测试样例 : 首地址        大 ...

  2. python ros 四元数转欧拉角

    #! /usr/bin/python import PyKDL import rospy from sensor_msgs.msg import Imu from nav_msgs.msg impor ...

  3. GO make&new区别

    自:http://www.cnblogs.com/ghj1976/archive/2013/02/12/2910384.html 1.make用于内建类型(map.slice 和channel)的内存 ...

  4. lucene正向索引——正向信息,Index –> Segments (segments.gen, segments_N) –> Field(fnm, fdx, fdt) –> Term (tvx, tvd, tvf)

    转自:http://www.cnblogs.com/forfuture1978/archive/2009/12/14/1623599.html 上面曾经交代过,Lucene保存了从Index到Segm ...

  5. 深入理解JVM虚拟机4:Java class介绍与解析实践

      用java解析class文件 转自https://juejin.im/post/589834a20ce4630056097a56 前言 身为一个java程序员,怎么能不了解JVM呢,倘若想学习JV ...

  6. ML_Homework_Porject_2_LDA_KNN

    第二次机器学习的作业完成了,写一下总结. 作业要求:实现用线性判别分析(LDA,LinearDiscriminantAnalysis)的二分类,用KNN比较LDA和PCA在有监督学习下的分类区别. 开 ...

  7. qt QThread

    QThread类提供了一个平台无关的方式来管理线程. 一个QThread对象在程序控制中管理一个线程.线程在run()中开始执行.默认情况下,run()通过调用exec()启动事件循环并在线程里运行一 ...

  8. Python JSON 字符串 转 json 基本使用

    字符串 转  json import json jsonData = '{"a":1,"b":2,"c":3,"d":4 ...

  9. zip格式压缩文件辅助类(ZipHelper)

    /// <summary> /// 压缩解压文件 /// </summary> public class ZipHelper { /// <summary> /// ...

  10. 好用的开源SVN仓库

    1.地址 https://svnbucket.com/#/projects 2.简单注册使用即可