目录


抽象类

一个类,如果有抽象方法(没有方法体),则该类必须被限定为抽象类(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. 在vultr中安装k8s测试

    vultr 安装k8s *** 如果国内访问 k8s.gcr.io 很慢,或者无法访问 *** 在应用yaml文件创建资源时,将文件中镜像地址进行内容替换即可: 将k8s.gcr.io替换为 regi ...

  2. 遇到bug如何处理

    issue中查询是否有相似bug assert / try-except / IDE单步调式 框架可以查询源码或者查询官方文档

  3. Ideal打war包和tomcat展示War包

    今天主要是介绍如何把java代码把成war包以及如何在tomcat中放置展示.比较简单.大家可以看看 刚开始ideal 不知道打包,网上搜索了一个教程,看了半天没看会. 主要还是说的不太明白 . 不过 ...

  4. 解决Mac系统IDEA debug卡顿问题

    查询资料发现,跟JDK8以及hosts设置有关. vim /private/etc/hosts 在127.0.0.1 localhost后面加上主机名即可,如<your hostname> ...

  5. linux内核中IS_ALIGNED是如何定义的?

    1. 定义如下: (include/linux/kernel.h) #define IS_ALIGNED(x, a)                (((x) & ((typeof(x))(a ...

  6. Android高频单词

    Display 显示 Camera 照相机 Bluetooth 蓝牙 Flash Memory 闪存 Audio 音频 Management 管理 SurFace 界面 Media 多媒体 Frame ...

  7. Centos 7 下 Corosync + Pacemaker + DRBD + psc + crmsh 实现 mysql 服务高可用

    一.介绍 高可用,大家可能会想到比较简单的Keepalived,或者更早一点的 heartbeat,也可能会用到 Corosync+Pacemaker,那么他们之间有什么区别. Heartbeat到了 ...

  8. Row_Number() and Rank() in SQL

    1. 数据表实例数据 2. 使用Row_Number()方法给每一行数据添加一个唯一编号, 可以按照某一列进行排序. 3. 使用Partition by Column在一个Partition内进行编号 ...

  9. SpringMVC源码分析--HandlerMappings

    之前分析过SpringMVC中的DispatcherServlet,分析了SpringMVC处理请求的过程.但忽略了一些DispatcherServlet协助请求处理的组件,例如SpringMVC中的 ...

  10. iOS中NSTimer的使用

    1.初始化 + (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelect ...