0026 Java学习笔记-面向对象-抽象类、接口
抽象方法与抽象类
- 抽象方法用abstract修饰,没有方法体部分,连花括号都不能有;
 - 抽象方法和抽象类都用abstract修饰
 - 包含抽象方法的类一定是抽象类;但不包含抽象方法的类也可以是抽象类
 - 不能创建抽象类的实例,抽象类里可以有构造方法,但只是用来给子类调用的
 - 抽象类可以包含类的5大要素:成员变量、抽象方法或非抽象方法、构造器、初始化块、内部类(接口、枚举)
 - 抽象方法的来源:
- 自己定义了一个抽象方法
 - 继承了一个抽象父类,却没有全部实现其抽象方法
 - 实现了一个接口,但没有全部实现其抽象方法
 
 - 注意区别抽象方法与空方法体:
- 抽象方法:没有方法体,连花括号都没有;得用abstract修饰
 - 空方法体:有方法体,只是为空;不能用abstract修饰
 - 二者就像"无"和"0"的区别
 
 - 抽象类只能被继承,其抽象方法,子类要么全部重写成非抽象方法,从而具有创建实例的资格,要么还是做个抽象类
 - abstract与final不能同时修饰一个类或者方法:前者必须被继承或重写,后者不能继承或重写
 - abstract与static不能同时修饰一个方法:前者修饰的方法没有方法体,后者得具有方法体。
 - abstract与static虽然不能同时修饰方法,但可以同时修饰内部类
 - abstract与private:抽象方法必须被重写,然而private方法没法被重写,二者也不能同时存在
 - 抽象类中可以有static方法,并且可以通过类名调用
 
抽象类有嘛用---模板模式
- 抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上大致保留抽象类的行为方式
 - 父类的一个非抽象方法可能依赖于一个抽象方法,而这个抽象方法得在子类中才能具体实现
 - 模板模式规则:
- 抽象父类可以只定义自己能实现的一些方法,不能实现的可以抽象成抽象方法,交给子类去实现
 - 抽象父类中的一个方法可能需要调用其他方法,这些被调方法,可以被父类实现,也可以由子类实现,依赖子类的辅助
 
 
接口是啥
- 类用class关键字定义;接口用interface关键字定义
 - 接口是对类的高度抽象,包含抽象方法和默认方法,定义了实现这个接口的所有类的共同具有的行为
 
如何定义接口
- 类用class定义,接口用interface定义;前者的修饰符省略或者public,接口也一样
 - 接口的命名规则与类相同
 - 接口可以有多个直接父接口,不能继承类
 - 接口的内部要素:
- 常量:默认public static final修饰;只能在声明时赋初始值
 - 内部类(接口、枚举):默认public static
 - 抽象方法:默认public abstract;不能有方法体
 - 类方法:1.8开始支持;默认public;必须包含方法体,static修饰类方法;通过接口名调用
 - 默认方法:1.8开始支持;默认public;必须包含方法体,default修饰默认方法;无static,只能通过实现类的实例调用
 - 不包含:构造器、初始化块
 
 
接口继承
- 类:继承extends一个直接父类;实现implements多个直接父接口
 - 接口:继承extends多个直接父接口
 
使用接口
- 接口的用途:
- 定义变量:接口可以用于定义一个引用类型变量,指向一个实现类的对象,可以用于强制类型转换
 - 调用接口中定义的常量、类方法
 - 被实现类实现
 
 - 实现一个接口:
- 类实现接口用implements关键字,多个接口间用逗号隔开
 - 同时继承父类、实现接口时,实现接口部分要放到继承部分的后面
 - 实现接口后,要全部重写抽象方法,否则就是个抽象类
 - 因为接口的成员都是public的,因此实现类重写的方法都是public
 - 所有接口类型的引用变量都可以直接赋给Object类型的引用变量
 
 
0026 Java学习笔记-面向对象-抽象类、接口的更多相关文章
- Java学习笔记之---比较接口与抽象类
		
Java学习笔记之---比较接口与抽象类 抽象类是描述事物的本质,接口是描述事物的功能 接口与抽象类的异同 1.一个类只能继承一个父类,但是可以有多个接口 2.抽象类中的抽象方法没有方法体,但是可以有 ...
 - 0028 Java学习笔记-面向对象-Lambda表达式
		
匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...
 - 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类
		
static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...
 - 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用
		
垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...
 - 0025 Java学习笔记-面向对象-final修饰符、不可变类
		
final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...
 - 0021 Java学习笔记-面向对象-包、构造器
		
封装 面向对象的三大特征: 封装 继承 多态 封装: 将对象的状态信息隐藏,不允许外部程序直接访问 通过该类提供的方法来访问和操作 有啥用: 隐藏类的实现细节 在方法中加入控制逻辑,限制对成员变量的不 ...
 - Java学习笔记之抽象类与接口
		
抽象类(abstract) 抽象类概述:一个类被abstract修饰表示这个类是抽象类, 自己定义方法但是不实现方法,后代去实现 抽象方法: 一个方法被abstract修饰表示这个方法是抽象方法 ...
 - 程序设计基础·Java学习笔记·面向对象(下)
		
Java程序设计基础之面向对象(下) (补充了上的一些遗漏的知识,同时加入了自己的笔记的ヾ(•ω•`)o) (至于为什么分P,啊大概是为了自己查笔记方便(?)应该是("` 3′") ...
 - 程序设计基础·Java学习笔记·面向对象(上)
		
Java程序设计基础之面向对象(上) (自适应学习进度而进行记录的笔记,希望有一些小小的用处吧(^∀^●)ノシ) (新人上路,望多指教,如有错误,望指正,万分感谢(o゚v゚)ノ) 目录 一.面向对象 ...
 
随机推荐
- 前端自动化构建工具gulp的使用总结
			
前端自动化构建工具gulp的使用总结 博主最近偶的空闲,在此对gulp的使用做一个总结,让小伙伴知道如何合理的使用gulp以及gulp的使用技巧. 谈到gulp,有人可能就会想到另外一个构建工具gru ...
 - hibernate笔记--单(双)向的多对多映射关系
			
在讲单向的多对多的映射关系的案例时,我们假设我们有两张表,一张角色表Role,一张权限表Function,我们知道一个角色或者说一个用户,可能有多个操作权限,而一种操作权限同时被多个用户所拥有,假如我 ...
 - Apple的LZF算法解析
			
有关LZF算法的相关解析文档比较少,但是Apple对LZF的开源,可以让我们对该算法进行一个简单的解析.LZFSE 基于 Lempel-Ziv ,并使用了有限状态熵编码.LZF采用类似lz77和lzs ...
 - 初学Python遇到的问题一二
			
这篇文章只是学Python最最最基础的部分知识,如果你已经有过python经验,哪怕就一点点经验,或许你都遇到过,但相信这些问题对你来说早已不算问题了,所以请跳过吧,用你的时间去学习更多其他的知识就好 ...
 - 企业 SOA 设计(1)–ESB 设计
			
最近为公司完成了一个 ESB 的设计.下面简要说明一下具体的设计方案. 企业 SOA 整体方案 在前一篇<SOA.ESB.NServiceBus.云计算 总结>中说到,SOA 是面向服 ...
 - Asp.net 面向接口可扩展框架之类型转化基础服务
			
新框架正在逐步完善,可喜可贺的是基础服务部分初具模样了,给大家分享一下 由于基础服务涉及面太广,也没开发完,这篇只介绍其中的类型转化部分,命名为类型转化基础服务,其实就是基础服务模块的类型转化子模块 ...
 - web api中的RouteHandler
			
ASP.NET MVC4中引入的Web API可以说是进行REST软件开发的利器(个人意见),但是最近在web form中混入web api时,发现一个问题:由于以前的web form项目中,使用到了 ...
 - Redis和Memcached整体
			
Redis和Memcached整体对比 Redis的作者Salvatore Sanfilippo曾经对这两种基于内存的数据存储系统进行过比较,总体来看还是比较客观的,现总结如下: 1)性能对比:由于R ...
 - javascript 百度地图API - demo
			
<!DOCTYPE html> <html> <head> <meta name="viewport" content="ini ...
 - http://www.mysqltutorial.org/python-mysql-query/
			
This tutorial shows you how to query data from a MySQL database in Python by using MySQL Connector/P ...