Java自学手记——接口
抽象类
1.当类和对象被abstract修饰符修饰的时候,就变成抽象类或者抽象方法。抽象方法一定要在抽象类中,抽象类不能被创建对象,如果需要使用抽象类中的抽象方法,需要由子类重写抽象类中的方法,然后创建子类对象来调用。需要注意的是,子类如果只重写了一部分抽象方法,那么该子类还是一个抽象类,如果抽象类中的方法要被使用,子类必须重写抽象类中所有的抽象方法。
2.引进抽象类的原因:把多个共性的东西提取到一个类中,这是继承的做法。 但是呢,这多个共性的东西,在有些时候,方法声明一样,但是方法体。也就是说,方法声明一样,但是每个具体的对象在具体实现的时候内容不一样。所以,我们在定义这些共性的方法的时候,就不能给出具体的方法体。而一个没有具体的方法体的方法是抽象的方法。在一个类中如果有抽象方法,该类必须定义为抽象类。
3.成员的特点:①成员变量:有变量,有常量;②有构造方法;③成员方法:有抽象方法,有非抽象方法。
4.常见问题:①抽象类有构造方法,但是不能实例化,那么构造方法的作用就体现在:用于子类访问父类数据的初始化;
②一个类中没有抽象方法,却定义成抽象类,作用是为了不让该类创建对象;
③不能和abstract共存的关键字:final(冲突),private(冲突)和static(无意义)。
接口概述
接口其实是一个特殊的抽象类,当抽象类中所有的方法都是抽象方法时,可通过接口的的形式来体现。Java中使用interface来定义接口,接口中只能出现public访问修饰符。接口中成员的格式如代码示例:
interface Person{
public static final String NAME="张三";
public abstract void eat(); //抽象方法没有方法主体
}
其中上面成员中的修饰符public static fianl和abstract在接口中就算不写也是默认存在的。接口不可以被创建对象,因为里面有抽象方法,需要被子类实现,子类对接口中所有的抽象方法实现后,子类才能够实例化,否则子类只是一个抽象类。
接口的应用
在继承中提到,Java是不支持多继承的,但是保留了这种机制,并且用另一种体现形式来完成表示,那就是多实现(implements)。代码示例:
//用interface创建两个接口
interface Run{
public abstract void run();
} interface Game{
void computerGame(); //这里默认自动补全public和abstract
} //用implements实现多个接口,为多实现
class Hobby implements Run,Game{
public void run(){ //这里必须要有public修饰,因为default权限小于接口方法中的public
System.out.println("跑步");
}
public void computerGame(){ //必须要把实现过来的方法全部重写
System.out.println("游戏");
}
} public class Test {
public static void main(String[] args) {
Hobby h = new Hobby();
h.run();
} }
继承和实现对于类与接口的关系:
1.类与类之间:继承关系
2.接口与类之间:实现关系
3.接口与接口之间:继承关系,接口与接口是可以有继承关系的,当一个类要实现一个继承了另一个接口的接口时,必须把父接口中的方法也重写。
接口的作用
接口可以提高功能的可扩展性,因为它降低了事物与事物之间的耦合性。如代码示例:
class Person{
String name;
int age;
}
interface Smoket{
public abstract void smoket();
}
class Student extends Person{
}
class Worker extends Person implements Smoket{
public void smoket(){
System.out.println("吸烟");
}
}
public class Test {
public static void main(String[] args) {
Worker w = new Worker();
w.smoket();
}
}
父类Person中定义的是多个类中共性的基本功能,接口中定义的是扩展功能,是可有可无的功能,可以在需要的时候再定义使用。以此降低了类与类之间的耦合性,相当于早年电脑的CPU和主板无法分离,无法单独更换CPU,接口的作用就是降低了这种耦合性,使得程序更加灵活,团队写项目的时候不会因为这个功能没有完成就不能开始另一个功能。
Java自学手记——接口的更多相关文章
- Java自学手记——struts2
struts2框架 struts2是一种基于MVC模式的框架,是在struts1的基础上融合了xwork的功能. struts2框架预处理了一些功能: >请求数据自动封装, >文件上传的功 ...
- Java自学手记——servlet3.0新特性
servlet3.0出来已经很久了,但市场上尚未普遍应用,servlet3.0有三个比较重要的新特性:使用注解来代替配置文件,异步处理以及上传组件支持. 支持servlet3.0的要求:MyEclip ...
- Java自学手记——泛型
泛型在集合中的应用 泛型在集合经常能看到,有两个好处:1.把运行时出现 的问题提前至了编译时:2.避免了无谓的强制类型转换. 用法:两边泛型的类型必须相同,可允许一边不写,只是为了兼容性,并不推荐. ...
- Java自学手记——Java中的关键字
Java中的一些关键字对于初学者来说有时候会比较混乱,在这里整理一下,顺便梳理一下目前掌握的关键字. 权限修饰符 有四个,权限从大到小是public>protected>defaul(无修 ...
- Java自学手记——多态
对象转型 学习多态前先明白一个叫对象转型的概念,如: class Animal{ void sleep(){ System.out.println("睡觉"); } } class ...
- Java自学手记——注解
注意区分注释和注解,注释是给人看的,注解是给程序看的. 注解的作用是代替配置文件,在servlet3.0中,就可以不再使用web.xml文件,而是所有配置都是用注解!比如注解类 @WebServlet ...
- Java自学手记——集合
- Java自学-集合框架 List接口
ArrayList与List接口 步骤 1 : ArrayList和List ArrayList实现了接口List 常见的写法会把引用声明为接口List类型 注意:是java.util.List,而不 ...
- 【转】JAVA自学之路
JAVA自学之路 一: 学会选择 为了就业,不少同学参加各种各样的培训. 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3G.测试等. 那么究竟应该选择什么方向 ...
随机推荐
- python serialread
代码易读,不再做注释 import serial,os port = os.popen('ls /dev/ttyACM*').read()[:-1] baud = 9600 ser = serial. ...
- 2017年最好的6个WEB前端开发手册下载
php中文网为你推荐6个web前端开发相关手册下载,适合web开发人员和php web开发人员进行下载参考学习! 一. html5中文手册 通过制定如何处理所有 HTML 元素以及如何从错误中恢复的精 ...
- linux 命令(alias , unalias , install ,ar , arch ,uname )
https://linux.die.net/man/ http://man.linuxde.net/ user commands 1.alias [ˈālēəs]:别名 alias --help al ...
- Fast data loading from files to R
Recently we were building a Shiny App in which we had to load data from a very large dataframe. It w ...
- 项目管理之 使用 appledoc 生成开发文档
写项目时通常会遇到要求写开发文档的需求,但是就源代码来说,文档最好和源码在一起,这样更新起来更加方便和顺手.Objective-C 有一些文档管理工具,doxygen, headdoc 和 apple ...
- Windows、Office系列产品精华部分集锦
提示 有了这个帖子麻麻再也不用担心我因为四处找Microsoft家的软件和系统而四处劳累所烦恼了! 首先,你们最爱的老XP同志,XP同志虽然退休了,但是依然坚持在岗位上,向他致敬!! Windows ...
- 一天搞定CSS:盒模型content、padding、border、margin--06
1.盒模型 网页设计中常听的属性名:内容(content).填充(padding).边框(border).边界(margin), CSS盒子模式都具备这些属性. 这些属性我们可以用日常生活中的常见事物 ...
- 移动应用/APP的测试流程及方法
1. APP测试基本流程 1.1流程图 1.2测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日),根据项目情况以及版本质量可适当缩短或延长测试时间.正式测试前先 ...
- 创建对象的N种模式
1 new Object() 先创建一个Object实例,然后为它添加属性和方法 var Person = new Object() Person.name = 'hl' Person.sayName ...
- 小试牛刀JavaScript鼠标事件
鼠标事件练习1 当鼠标点击网页某个单元格的时候,其他的单元格颜色不变,只有被点击的单元格颜色发生变化 <style type="text/css"> *{ margin ...