一、抽象类和抽象方法

  1.什么是抽象类

    普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法、普通方法、static方法、常量和变量等内容。

    但是普通类中不能有抽象方法,什么是抽象方法呢?

    抽象方法,是指使用关键字abstract修饰的类,只声明返回的数据类型、方法名称和所需参数,并没有方法体的方法。

    也就是说我们声明即可,并不要实现。

    而拥有抽象方法的类就是抽象类,抽象类同样要使用abstract关键字声明。

  2.那么为什么有抽象类和抽象方法呢?

    简单的说就是为了实现多态。我们可以继承抽象类,实现其内部方法来创建和修改成新的类。

  3.抽象类的使用原则

    (1)抽象类必须为public或者protected(如果是private则不能被子类继承,违背了设计初衷)

    (2)抽象类不能直接实例化,也就是不能直接new

        如果想实例一个抽象类就必须建立一个非抽象的子类。

        当然子类必须实现抽象类中的抽象方法,然后创建一个这个抽象类的子类完成新建实例。

    (3)一个子类只能继承一个抽象类,因为JAVA是单继承机制

    (4)子类必须重写实现抽象类中的全部抽象方法,如果有抽象没有实现,子类必须要变成抽象类。

换句话来说就是,当一个抽象类继承一个抽象类,才可以不实现全部抽象方法。

  4.抽象类与抽象方法

    (1)抽象类中不一定要有抽象方法。也就是说,抽象类中可以没有抽象方法,可以有已经实现了的方法。

    (2)含有抽象方法的类一定是抽象类。如果一类中含有抽象方法,那么该类一定是抽象方法。 

  注意:抽象类可以不包括抽象方法,它反正不会去实例化,抽象类不能被实例化,也就是不能用new关键字去产生对象。

        抽象方法只需声明,而不需实现,抽象类的子类必须覆盖所有的抽象方法后才能被实例化。

否则这个子类还是个抽象类,里面的方法是不是抽象的没有本质影响。

 二、接口

   1.什么是接口

    接口是在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。

    一个类通过继承接口的方式,从而来继承接口的抽象方法。 

   2.接口特性

    (1)接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract

(只能是 public abstract,其他修饰符都会报错)。

    (2)接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量

(并且只能是 public,用 private 修饰会报编译错误)。

    (3)接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。  

   注意

      接口是隐试抽象,当声明接口的时候,不用使用abstract关键字

      接口中的每一个方法也是隐试抽象,不用使用abstract关键字

      接口中的方法都是public的

三、接口和抽象类的异同   

   1.接口与抽象类的相同点

    (1)接口和抽象类都不能被实例化

    (2)子类继承了接口和抽象类都要实现抽象方法

   2.接口与抽象类的不同点

    (1)抽象类中可以含有方法体,接口不可以,只能包含抽象方法

    (2)抽象类的成员变量可以是各种类型的,而接口的成员变量只能是public static final类型的

    (3)接口中不能含有静态代码块以及静态方法(用static关键字来修饰的方法),抽象类中可以有

    (4)接口的扩展性好,一个类只能继承一个抽象类,但是可以继承多个接口

    (5)抽象类可以有构造方法,接口则不可以有

  

  

【Java】抽象类和接口的更多相关文章

  1. java抽象类与接口的区别及用法

    java抽象类与接口的区别及用法 一.抽象类里面的方法可以有实现,但是接口里面的方法确是只能声明. 二.接口是设计的结果 :抽象类是重构的结果 . 三.java不支持多重继承,所以继承抽象类只能继承一 ...

  2. Java 抽象类与接口总结

    一.为什么要使用抽象类?有什么好处? 抽象类是通用接口.不同的子类可以用不同的方法表示此接口.通用接口建立起一种基本形式,以此表示所有子类的共同部分. 必须覆写父类abstract抽象的方法  含有抽 ...

  3. JAVA抽象类和接口的深入探讨

    Java 语言中,抽象类(abstract class) 和接口(interface) 是抽象思想的两种体现形式.初学者很容易把这两者搞混,所以Java面试中考抽象类和接口的区别的面试题也常有出现的. ...

  4. 第十八节:详解Java抽象类和接口的区别

    前言 对于面向对象编程来说,抽象是它的特征之一. 在Java中,实现抽象的机制分两种,一为抽象类,二为接口. 抽象类为abstract class,接口为Interface. 今天来学习一下Java中 ...

  5. Java抽象类和接口的比较

    一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法和一些具体 ...

  6. java抽象类与接口区别

    java抽象类与接口区别: abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力. abstr ...

  7. Java抽象类和接口的区别(好长时间没看这种文章了)

    Java抽象类和接口的区别(好长时间没看这种文章了) abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的 ...

  8. Java 抽象类和接口的理解

    Java 抽象类和接口的理解 一.抽象类 为什么使用抽象类(个人理解): 面向对象的概念是,我们知道的所有的对象都是通过类来描绘的,如果类包含的信息不能描绘一个具体的对象,就需要抽象来解决了,意思是一 ...

  9. 记录:JAVA抽象类、接口、多态

    JAVA抽象类.接口.多态 1. 多态 定义 多态是同一个行为具有多个不同表现形式或形态的能力.(多态就是同一个接口,使用不同的实例而执行不同操作) 如何实现多态 继承和接口 父类和接口类型的变量赋值 ...

  10. Java——抽象类与接口的前世今生

    该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 1.抽象类: 当编写 ...

随机推荐

  1. pandas 修改列名

    原始文件 下面是Excel打开以及pd.read_csv() 打开: 里面只是干巴巴的数据,没有列名,so,需要给其设置列名. Method1 不让第一行数据默认当作列名(默认第一行数据是列名了). ...

  2. 【我的Android进阶之旅】解决错误:No enum constant com.android.build.gradle.OptionalCompilationStep.FULL_APK

    今天在分支编译代码并允许之后,接着同步主干代码之后,再继续点击[Run]按钮允许程序的时候报错了,错误描述日志如下所示: 一.错误描述 Error:(1, 1) A problem occurred ...

  3. java.lang.instrument: 一个Java对象占用多少字节?

    一.对象头包括两部分信息:Mark Word(标记字段)和 Klass Pointer(类型指针)   1. Mark Word 用于存储对象自身的运行时数据,如哈希码(HashCode).GC分代年 ...

  4. sql 基础查询集锦

    授权 GRANT All ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED ...

  5. position学习终结者(二)

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/wangshuxuncom/article/details/30982863         在博客& ...

  6. ansible判定文件或者文件夹是否存在

    ansible 的常用模块中没有判定当文件存在或者不存在时,执行某个执行 使用下面方法能简单判定某个文件是否存在 --- - name: judge a file or dir is exits sh ...

  7. CoreThink开发(十二)更改默认出错异常页防止暴露敏感数据

    默认的异常页会打印文件位置,而且是绝对路径,会打印SQL语句,真实上线一定不要用这个默认的,而且关闭trace关闭调试模式也不行. 针对CoreThink1.2 ThinkPHP3.2 这个文件在 A ...

  8. http的请求流程

    # !/usr/bin/env python # coding:utf-8 import socket def handle_request(client): buf = client.recv(10 ...

  9. 关于myeclipse+tomcat+struct2的热部署问题

    今天满心欢喜的打开电脑来写程序,却不曾想到它竟然给我搞事情,前几天刚学的struct2热部署竟然不好用了.每次改java文件都要重新部署好麻烦,最后花了了好长时间才解决,必须在这里总结一下: (1)s ...

  10. canvas 事件绑定

    Canvas事件绑定   canvas事件绑定 众所周知canvas是位图,在位图里我们可以在里面画各种东西,可以是图片,可以是线条等等.那我们想给canvas里的某一张图片添加一个点击事件该怎么做到 ...