目录


抽象类

一个类,如果有抽象方法(没有方法体),则该类必须被限定为抽象类(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 的时候,该接口只能在本类中实现,并且实现的类,只能本在类中使用 ;

        public class Test1 {
    // 修饰为 private
    private interface MyTest{
    void print();
    } // 不能在外部实现该接口
    class MyTestImpl implements MyTest{ @Override
    public void print() {
    System.out.println("aha !");
    }
    } @Test
    public void test() {
    new MyTestImpl().print();
    }
    }

  • 接口与接口之间嵌套

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

    public interface BB {
    
        public interface AA{
    void mmm() ;
    } void sss();
    } ------------------------------------------- class BBimpl implements BB{ @Override
    public void sss() {
    System.out.println("ssss");
    }
    }

抽象类 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. Java面向对象6 (AA - AE)

    整理音乐(SDUT 2053) import java.util.*; public class Main { public static void main(String[] args) { Sca ...

  2. jQuery的ajax请求express服务器返回数据

    html页面 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  3. ZR#957

    ZR#957 解法: 首先 $ T $ 必须得要是 $ S $ 的子序列,不然不存在好的下标序列,因此一定无解. 考虑判断一个串 $ T $ 是不是 $ S $ 子序列的贪心做法:每次从没有匹配的位置 ...

  4. 将制定目录家到系统PATH环境变量中

    1.打开系统文件sudo vim/etc/profile,请输入root密码 2.在appendpath '/usr/local/sbin' appendpath '/usr/local/bin' a ...

  5. fluent中如何对一个非整个volume的特定的区域进行数据分析?【转载】

    作者:王蒙 链接:https://www.zhihu.com/question/37432813 来源:知乎 很抱歉,我不知道 fluent 中是否有这一功能,我这个学期才开始学.但 CFD-Post ...

  6. Git 工作流

    一.分类 1.集中式工作流 像 SVN 一样,集中式工作流以中央仓库作为项目所有修改的单点实体.所有修改都提交到 Master 这个分支上. 这种方式与 SVN 的主要区别就是开发人员有本地库.Git ...

  7. Go by Example-循环

    Go By Example-循环语句 Go和其他大多数语言不太一样,没有While和Do-Whiile形式的循环,只有一个for,来实现循环. 基本结构 for循环的基本结构是这个样子 for 变量; ...

  8. JMeter学习-参数化

    JMeter也有像LR中的参数化,本篇就来介绍下JMeter的参数化如何去实现. 参数化:录制脚本中有登录操作,需要输入用户名和密码,假如系统不允许相同的用户名和密码同时登录,或者想更好的模拟多个用户 ...

  9. angular中父组件给子组件传值-@input

    1. 父组件调用子组件的时候传入数据 <app-header [msg]="msg"></app-header> 2. 子组件引入 Input 模块 imp ...

  10. Dubbo -- 关于 api接口调用不使用强依赖

    首先,我们都知道  Dubbo 调用api 需要提供暴露  接口,   消费端才通过 ZK 可以调用 通常我们都会使用 提供 api  jar包 的方式 使用  这样既方便又快捷 简单 只需要在spr ...