十、Java基础---------面向对象之抽象类与接口
抽象类(abstract)
当编写一个类时,时常会为该类定义一些方法,这些方法的使用用以描述该类的行为方式,那么这些方法都有具体的方法体。但是在某些情况下,某个父类只是知道子类应该包含怎样的方法,但是无法精确的知道这些子类是如何实现这些方法,例如定义一个GetTime类,该类提供了一个计算某一段程序运行时间的gettime方法,但是无法知道具体运行什么方法体,这时就需要使用抽象方法来实现了。
抽象类概念
当多个类中出现相同功能,但是功能主体不同,这时候可以进行向上抽取,只抽取功能定义,而不抽取功能主体。分析事物不确定时,就抽象。
特点:
1.抽象方法只能定义在抽象类中。
2.抽象方法和抽象类必须被abstract修饰
3.抽象类不可以用new 创建对象,因为创建对象没有意义
4.抽象类中的抽象方法要被使用,必须由子类复写抽象方法后,建立子类对象调用
5.如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。如果不想子类是抽象类必须,复写父类抽象类中的全部抽象方法。
特殊
抽象类中可以不定义抽象方法,这样做仅仅是为了避免建立本类对象
什么时候使用抽象:
抽象类和一般类没有太大的区别,当事物出现不确定的功能,需要明确指出,但是无法定义主体,通过抽象方法来表示。
抽象类比一般类多了个抽象方法,抽象类不可以实例化,抽象类中还可以定义非抽象方法,目的是不让该类建立对象。
抽象类成员
抽象类可以包含 普通方法、 成员变量、 构造方法。
抽象格式特点
在需要抽象的方法上用abstract进行修饰,同时该方法没有方法体,结尾';'结尾。
应用:
下面程序展示了用抽象定义一个获取某一段程序运行时间的方法。
abstract class GetTime
{
public final void gettime()
{
long start = System.currentTimeMillis();
runcode();//调用指定方法
long end = System.currentTimeMillis();
System.out.println(end-start);//定义获取程序运行时间的抽象方法,子类需要覆盖该方法
}
public abstract void runcode();
}
class Subtime extends GetTime{
public void runcode(){//子类覆写抽象方法,该方法体即为需要计算运行时间的方法
for(int x=0;x<1000;x++){
System.out.println(x);
}
}
}
注意事项:
不能与 final 一起使用:抽象是用来继承的所以不可以与final同时使用。
不能与private一起使用: 抽象类中的私有的抽象方法,不被子类所知,就无法被复写。而抽象方法出现的就是需要被复写。
不能与 static 一起使用:如果static可以修饰抽象方法,那么连对象都省了,直接类名调用就可以了。可是抽象方法运行没意义。
抽象类该怎样描述事物就怎么描述,只是有一些内容"看不懂",所以可以有包含成员变量与方法,构造方法。
如果一个类中存在抽象方法,那么该类一定要用abstract修饰(该类一点是抽象类)
接口(interface)
由于电脑买的比较早,硬盘的容量很小,随着时间的推移慢慢的感觉到存储容量的压力,但是电脑为我提供了一个USB接口,由于USB接口的存在,我买一个移动硬盘就很好的解决了硬盘容量不足的问题,假设如果没有USB接口要想解决这个问题就需要更换硬盘,或者换电脑其弊端大家很容易就明白了。这里我们说的接口和要介绍的程序接口道理是相通的。
接口概念
接口定义了一系列规范,想要实现某一个功能就必须遵守该规范,也就是说是 要想实现某一个接口,就must be按照使用接口的规范(读者反馈,谢谢)。
初期理解,可以认为是一个特殊的抽象类当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示。
特点
1,接口中可以定义:常量,抽象方法。
2,接口中的成员都有固定修饰符:
常量:public static final
方法:public abstract
记住:接口中的成员都是public的。
3,接口不可以创建对象
接口作用
1,接口是对外暴露的规则
2,接口是程序的功能扩展
3,接口的作用主要是为了统一访问
什么时候使用接口
当使用一个函数(暂且说是函数吧)时,但是函数的主体不确定,只是定义该方法的规范比如返回值,参数列表时,这是就应该考虑使用接口区定义。
接口的成员
常量,抽象方法。
接口格式特点
在生命一个类是接口时不再吃用class 而是使用 interface去定义。
注意事项
接口:是不可以创建对象的,因为有抽象方法。
需要被子类实现,子类对接口中的抽象方法全都覆盖后,子类才可以实例化。否则子类是一个抽象类。
接口可以被类多实现,也是对多继承不支持的转换形式。java支持多实现。
接口之间关系为继承,需要特别声明的是接口之间允许使用多继承。所以从这个角度来说 java支持多继承。
应用实例
interface A {
void methodA();
}
interface B
{
void method();
}
interface C extends B, A {
void methodC();
}
抽象与接口区别
抽象
1、抽象类是可以有私有方法或私有变量的,实现抽象类可以有选择地重写需要用到的方法,
但是必须实现里面所有的抽象方法。
2、抽象类在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。
3、抽象类中可以有自己的数据成员,也可以有非abstarct的成员方法。
4、抽象类和接口所反映出的设计理念不同。其实abstract class表示的是"is-a"关系
5、抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。
接口
1、接口是公开(public)的,里面不能有私有的方法或变量,是用于让别人使用的,
实现接口的一定要实现接口里定义的所有方法。
2、一个类却可以实现多个interface(java中实现多重继承的方法之一)。
而在接口中,只能够有静态的不能被修改的数据成员(也就是必须是 static final的,
3、不过在 interface中一般不定义数据成员),而且所有的成员方法都是抽象的。
4、interface表示的是"like-a"关系。(组合是"has a"关系)
5、接口中定义的变量默认是public static final 型,且必须给其初值,
所以实现类中不能重新定义,也不能改变其值。
十、Java基础---------面向对象之抽象类与接口的更多相关文章
- 【java基础 16】抽象类和接口的区别
导读:前两天闲着没事儿,看了本书,然后写了点代码,在接口里面写了默认方法实现,因为书上说这个特性是从java8开始的,我还特地给测了一下java7. 没过几天,就有一个技术分享会,刚好也是讲java8 ...
- Java基础系列--06_抽象类与接口概述
抽象类 (1)如果多个类中存在相同的方法声明,而方法体不一样,我们就可以只提取方法声明. 如果一个方法只有方法声明,没有方法体,那么这个方法必须用抽象修饰. 而一个类中如果有抽象方法,这个类必须定义为 ...
- Java:【面向对象:抽象类,接口】
本文内容: 抽象类 接口 抽象类与接口的异同 首发日期:2018-03-24 抽象类: 虽然已经有了父类,但有时候父类也是无法直接描述某些共有属性的,比如哺乳类和人类都会叫,而一般来说哺乳类这个父类并 ...
- Java基础知识(抽象类和接口)
一.抽象类 在了解抽象类之前,先来了解一下抽象方法.抽象方法是一种特殊的方法:它只有声明,而没有具体的实现.抽象方法的声明格式为: 1 abstract void fun(); 抽象方法必须用abst ...
- Java基础5:抽象类和接口
本文主要介绍了抽象类和接口的特性和使用方法. 具体代码在我的GitHub中可以找到 https://github.com/h2pl/MyTech 文章首发于我的个人博客: https://h2pl.g ...
- Java 基础 面向对象和抽象类
面向对象变量 局部变量和成员变量区别 区别一:定义的位置不同 定义在类中的变量是成员变量 定义在方法中或者{}语句里面的变量是局部变量 区别二:在内存中的位置不同 成员变量存储在对内存的对象中 局部变 ...
- Java基础-面向对象第三大特性之多态(polymorphism)
Java基础-面向对象第三大特性之多态(polymorphism) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多态概述 多态是继封装,继承之后,面向对象的第三大特性,多态的 ...
- Java基础-面向对象第二特征之继承(Inheritance)
Java基础-面向对象第二特征之继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承的概述 在现实生活中,继承一般指的是子女继承父辈的财产.在程序 ...
- java基础面向对象之类与对象
java基础面向对象之类与对象 2017-01-14 1.面向对象的基本概念 以一种组建化的形式进行代码设计 1)在面向对象程序设计中包含有如下几种特性 •封装性:保护内部结构的安全性 •继承性:在已 ...
随机推荐
- 使用Privoxy做智能代理切换
使用Privoxy做智能代理切换 You take the blue pill, the story ends, you wake up in your bed, and believe whatev ...
- session.load()和session.get()的区别
Session.load/get方 法均可以根据指定的实体类和id从数据库读取记录,并返回与之对应的实体对象. 其区别在于: 如果未能发现 符合条件的记录,get方法返回null, 而load方 法会 ...
- Hibernate调用存储过程和函数
操作大批量数据或复杂逻辑,考虑到执行效率和代码量的时候,存储过程和函数在数据库中是预编译好的,调用执行效率高 // 调用过程 {call 过程名称(?,?,?)} public static void ...
- cmd 更改字体
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont,在右面找到936值双击打开,数 ...
- hdu 小希的迷宫
真是被这道并查集的水题给坑哭了...忘记给uset数组初始化我也是醉了. 题目意思是找到判断是不是连通无环的图,首先想到的就是并查集. 1判断成环的时候,只要判断输入边的两个点.有一个共同的父节点,那 ...
- Apache Spark源码走读之23 -- Spark MLLib中拟牛顿法L-BFGS的源码实现
欢迎转载,转载请注明出处,徽沪一郎. 概要 本文就拟牛顿法L-BFGS的由来做一个简要的回顾,然后就其在spark mllib中的实现进行源码走读. 拟牛顿法 数学原理 代码实现 L-BFGS算法中使 ...
- CentOS7安装mysql5.6.23
============安装glibc版本============== 一.下载glibc版本的Mysql mysql-advanced-5.6.23-linux-glibc2.5-x86_64.zi ...
- 基于TCP/IP的长连接和短连接
1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次 ...
- 【后台测试】Linux下小试jmeter
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5784288.html 前言 上一篇主要讲了在Window ...
- IIS不能对网站添加默认文档(由于权限不足而无法写入配置文件)
IIS7以上版本配置网站时需要手动配置网站目录的文件夹权限 增加"IIS_IUSER"用户的修改权限 但增加后仍然提示“ 由于权限不足无法写入配置文件” 通常是Web.config ...