JavaSE基础知识(5)—面向对象(抽象类和接口)
一、抽象类
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)—面向对象(抽象类和接口)的更多相关文章
- java基础知识回顾之抽象类和接口的区别
/* 抽象类和接口的异同点: 相同点: 都是不断向上抽取而来的. 不同点: 1,抽象类需要被继承,而且只能单继承. 接口需要被实现,而且可以多实现. 2,抽象类中可以定义抽象方法和非抽象方法,子类继承 ...
- 《Java基础知识》Java抽象类,接口的概念和使用
1.抽象类 在自上而下的继承层次结构中,位于上层的类更具有通用性,甚至可能更加抽象.从某种角度看,祖先类更加通用,它只包含一些最基本的成员,人们只将它作为派生其他类的基类,而不会用来创建对象.甚至,你 ...
- 第二十八节:Java基础-进阶继承,抽象类,接口
前言 Java基础-进阶继承,抽象类,接口 进阶继承 class Stu { int age = 1; } class Stuo extends Stu { int agee = 2; } class ...
- JavaSE基础知识总结
最近回顾了一下Java的基础知识,决定写成博客梳理一遍,主要是JavaSE部分最基础的知识,适合考前突击,学后回顾,不适合作为初学材料. 简单的列个目录吧: 一.数据类型和运算符 二.流程控制与数组 ...
- C#基础知识之面向对象以及面向对象的三大特性
在C#基础知识之类和结构体中我详细记录了类.类成员.重载.重写.继承等知识总结.这里就记录一下对面向对象和面向对象三大特性的广义理解. 一.理解面向对象 类是面向对象编程的基本单元,面向对象思想其实就 ...
- Java基础系列4:抽象类与接口的前世今生
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 1.抽象类: 当编写 ...
- JAVA基础知识之面向对象编程知识汇总
JAVA基础课程部分面向对象已经学习完成,知识结构如下: 总体知识框架: 类的结构: 面向对象编程三大特征: 关键字和抽象类接口等: 常见知识汇总: 成员变量和局部变量比较 有无返回值方法比较: 权限 ...
- JavaSE 基础知识(常识概念 + 基础语法)问答总结/面试题 —— 讲给应届生的 Java 开源知识项目
写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...
- 0026 Java学习笔记-面向对象-抽象类、接口
抽象方法与抽象类 抽象方法用abstract修饰,没有方法体部分,连花括号都不能有: 抽象方法和抽象类都用abstract修饰 包含抽象方法的类一定是抽象类:但不包含抽象方法的类也可以是抽象类 不能创 ...
随机推荐
- idhttp采集时遇到乱码问题解决
关键部分代码: FIdhttp.Request.Referer := SQL; stream := TStringStream.Create(''); stream.Position := 0; FI ...
- 主动收入VS被动收入
主动收入VS被动收入 天差地別 主动收入是指有工作才有收入, 不工作就没有的收入, 它是一种临时性收入, 做一次工作得到一次回报. 主动收入的最大的特点是 “用时间换钱”, 就像很多上班族有一份月薪6 ...
- django 三种缓存模式的使用及注意点
Django 缓存模式的使用(主要针对RestFul设计模式的项目) 有三种模式: 全站使用缓存模式(整个项目每个接口都会使用缓存,缺点:所以接口都无法实时性获取数据) 单独视图缓存模式(单个接口使用 ...
- Linux系统上面使用python切割nginx日志
#!/usr/bin/python import time import os import commands path = ['/var/log/nginx/', 'access.log'] (nu ...
- Exp2 后门原理与实践 20164311
实验一:使用netcat获取主机操作Shell,cron启动 1.Windows获得Linux Shell (1)打开本机win10的cmd.exe,使用命令 ipconfig 查看win10的IP地 ...
- nagios nrpe
- leetcode每日刷题计划-简单篇day8
今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solution { public: int climbSt ...
- LocalVariableTable之 Slot 复用
LocalVariableTable中的 Slot, 是存在复用现象的,这个我早就知道,但是,不太清楚是如何复用的. Java语言规范与JVM规范都没有对Java语言具体要如何使用JVM的局部变量sl ...
- hml页面转化成图片
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name=&qu ...
- ubuntu安装带调试功能的bochs
①进入bochs官网下载源码包 说明 用安装包直接安装没有调试功能 下载源码包步骤 a.输入网址:http://bochs.sourceforge.net/ b.单击图中红色标注图标 c.单击图中红色 ...