一、抽象类

1、理解

abstract关键字定义的类,称为抽象类
用abstract关键字定义的方法,称为抽象方法
意义:
当设计父类时,发现该父类根本不需要创建对象,并且里面有不好描述的方法。这个时候往往将该父类设计成抽象类!

2、abstract关键字

abstract属于一种修饰符,只能用于修饰类或方法,不能修饰属性、构造器、局部变量

3、抽象类

语法:
  [修饰符] abstract class 类名{}
特点:

①抽象类不可以使用final修饰符,原因:和抽象类的意义冲突(final修饰的类不可以被继承)
②抽象类中可以有普通成员,也可以有抽象方法
③抽象类中有构造器,目的:为了初始化信息
④抽象类不可以创建本类对象
⑤抽象类的扩展:子类继承抽象类时,如果子类是具体的实现类,要求必须实现抽象类中的抽象方法,否则,不用实现抽象类的抽象方法

4、抽象方法

语法:
  [修饰符] abstract 返回类型 方法名(参数列表);
特点:

①抽象方法没有实现体,只有方法签名,使用分号结尾
②修饰符不可以是private、static、final,因为违背了实现的意义
③抽象方法只能出现在抽象类或接口中,不能出现在具体的实现类中
④当含有抽象方法的类或接口,被实现类实现时,要求必须实现里面所有的抽象方法

二、接口

1、好处

①避免了单继承局限性
②接口的实现更加灵活,实现类和接口之间不再是is-a 的关系,仅仅需要 like-a 的关系
③提高代码的解耦性,降低依赖性

2、定义特点

①使用interface关键字定义,修饰符只能是public或默认
②jdk8之前,接口中只能是静态常量+抽象方法
  静态常量的修饰符,只能是public static final ,可以省略
  抽象方法的修饰符,只能是public abstract,可以省略
 jkd8对接口的改进:接口中可以有静态方法和默认方法
  静态方法:
    public static 返回类型 方法名(参数列表){
      //实现体
    }
  默认方法:
    pubilc default 返回类型 方法名(参数列表){
      //实现体
    }
jdk9对接口的改进:接口中可以有私有方法(jdk8增加了可以实现的方法,为了方法体中调用一些共同的代码,增加私有方法,供本接口内部使用)
  private 返回类型 方法名(参数列表){}

注意:

 当实现的接口和父类中有同名的实现方法时,子类默认执行的是父类的方法,遵循"类优先"原则
 当实现的多个接口中有同名的实现方法时,子类必须重写该方法,否则有歧义,编译报错

③接口中没有构造器
④接口不能创建本身对象

3、使用特点

①类可以实现多个接口,使用implements关键字
  class A implements 接口1,接口2{}
②类可以既继承父类,又实现接口
  class A extends B implements 接口1,接口2{}
③接口可以继承多个接口,使用extends关键字
  interface Inter extends 接口1,接口2{}
④普通的实现类实现接口的话,必须实现里面所有抽象方法;抽象类实现接口的话,不用全部实现所有抽象方法

三、抽象类和接口比较

 

定义关键字

构造器 创建对象本身 能否有普通成员 里面的属性 里面的抽象方法 继承
抽象类 abstract class 可以 无要求

不能是private、final、static,

其他修饰符可以

单继承
接口 interface 不可以

要求必须是静态的常量属性

修饰符只能是public static final,可以省略

jdk8之前只能是public abstract,可以省略

jkd8之后可以是静态方法和默认方法

jkd9之后可以是私有方法

多继承多实现

JavaSE基础知识(5)—面向对象(抽象类和接口)的更多相关文章

  1. java基础知识回顾之抽象类和接口的区别

    /* 抽象类和接口的异同点: 相同点: 都是不断向上抽取而来的. 不同点: 1,抽象类需要被继承,而且只能单继承. 接口需要被实现,而且可以多实现. 2,抽象类中可以定义抽象方法和非抽象方法,子类继承 ...

  2. 《Java基础知识》Java抽象类,接口的概念和使用

    1.抽象类 在自上而下的继承层次结构中,位于上层的类更具有通用性,甚至可能更加抽象.从某种角度看,祖先类更加通用,它只包含一些最基本的成员,人们只将它作为派生其他类的基类,而不会用来创建对象.甚至,你 ...

  3. 第二十八节:Java基础-进阶继承,抽象类,接口

    前言 Java基础-进阶继承,抽象类,接口 进阶继承 class Stu { int age = 1; } class Stuo extends Stu { int agee = 2; } class ...

  4. JavaSE基础知识总结

    最近回顾了一下Java的基础知识,决定写成博客梳理一遍,主要是JavaSE部分最基础的知识,适合考前突击,学后回顾,不适合作为初学材料. 简单的列个目录吧: 一.数据类型和运算符 二.流程控制与数组 ...

  5. C#基础知识之面向对象以及面向对象的三大特性

    在C#基础知识之类和结构体中我详细记录了类.类成员.重载.重写.继承等知识总结.这里就记录一下对面向对象和面向对象三大特性的广义理解. 一.理解面向对象 类是面向对象编程的基本单元,面向对象思想其实就 ...

  6. Java基础系列4:抽象类与接口的前世今生

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

  7. JAVA基础知识之面向对象编程知识汇总

    JAVA基础课程部分面向对象已经学习完成,知识结构如下: 总体知识框架: 类的结构: 面向对象编程三大特征: 关键字和抽象类接口等: 常见知识汇总: 成员变量和局部变量比较 有无返回值方法比较: 权限 ...

  8. JavaSE 基础知识(常识概念 + 基础语法)问答总结/面试题 —— 讲给应届生的 Java 开源知识项目

    写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...

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

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

随机推荐

  1. 洛谷题解 CF777A 【Shell Game】

    同步题解 题目翻译(可能有童鞋没读懂题面上的翻译) 给你三张牌0,1,2. 最初选一张,然后依次进行n次交换,交换规则为:中间一张和左边的一张,中间一张和右边一张,中间一张和左边一张...... 最后 ...

  2. 进程、线程与GIL全局解释器锁详解

    进程与线程的关系: . 线程是最小的调度单位 . 进程是最小的管理单元 . 一个进程必须至少一个线程 . 没有线程,进程也就不复存在 线程特点: 线程的并发是利用cpu上下文的切换(是并发,不是并行) ...

  3. php中上传图片,原生代码

    一.实现图片上传方法一 html的写法: <form action="handle.php" name="form" method="post& ...

  4. c# 复制整个文件夹的内容,Copy所有文件

    /// <summary> /// 文件夹下所有内容copy /// </summary> /// <param name="SourcePath"& ...

  5. spring suite tool 添加namespace时只有bean一个

    在eclipse的windows->Preferences->Spring->Beans Support->Namespaces 在此记录此问题.

  6. Android 开发 关于7.0 FileUriExposedException异常 详解

    异常原因 Android不再允许在app中把file://Uri暴露给其他app,包括但不局限于通过Intent或ClipData 等方法.原因在于使用file://Uri会有一些风险,比如: 文件是 ...

  7. 前端 js加密 后台java 解密 RSA

    前端代码 : $.ajax({ type:"GET", url:"http://localhost:8084/getPulbicKey", dataType:& ...

  8. leetcode每日刷题计划-简单篇day6

    突发奇想&胡思乱想的一天 银行家算法证明错了并挂在黑板上的可怜希希 Num 53 最大子序和 Maximum Subarray O(n)的算法实现了,分治法有空补 class Solution ...

  9. 彻底搞懂Scrapy的中间件(三)

    在前面两篇文章介绍了下载器中间件的使用,这篇文章将会介绍爬虫中间件(Spider Middleware)的使用. 爬虫中间件 爬虫中间件的用法与下载器中间件非常相似,只是它们的作用对象不同.下载器中间 ...

  10. node-服务器

    原生: const http=require('http'); http.createServer((request,response)=>{ response.writeHead(200,{& ...