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.测试等. 那么究竟应该选择什么方向 ...
随机推荐
- iOS安全攻防之阻止GDB依附
GDB是大多数hackers的首选,阻止GDB依附到应用的常规办法是: #import <dlfcn.h> #import <sys/types.h> typedef int ...
- LiteIDE灰调配色方案
说明 本文写于2017-04-03,使用LiteIDE X31(基于Qt 4.8.5),操作系统为Windows. 使用 LiteIDE下载后解压即可使用.配色方案的所有配置文件都位于liteide/ ...
- 20个php框架
对于Web开发者来说,PHP是一款非常强大而又受欢迎的编程语言.世界上很多顶级的网站都是基于PHP开发的.本文我们来回顾一下20个2014年最优秀的PHP框架. 每一个开发者都知道,拥有一个强大的框架 ...
- js 排序:sort()方法、冒泡排序、二分法排序。
js中的排序,这里介绍三种,sort()方法.冒泡排序.二分法排序. 1.sort方法 写法: 数组.sort(); 返回排好序的数组,如果数组里是数字,则由小到大,如果是字符串,就按照第一个字符的 ...
- 提高java编程质量 - (四)i++ 和 ++i 探究原理
先看一个例子: package com.test; public class AutoIncrement { public static void main(String[] args) { int ...
- DNS全局负载均衡(GSLB)基本原理
原理 DNS全局负载均衡通过智能DNS解析来实现,通常在不同的地区设立多个数据中心,每个数据中心又使用多个运营商的线路.目前很多DNS服务商都提供了智能DNS服务,智能DNS通常是利用各运营商分省IP ...
- python基础之字典dict和集合set
作者:tongqingliu 转载请注明出处:http://www.cnblogs.com/liutongqing/p/7043642.html python基础之字典dict和集合set 字典dic ...
- Java 中Calendar、Date、SimpleDateFormat学习总结
在之前的项目中,经常会遇到Calendar,Date的一些操作时间的类,并且总会遇到时间日期之间的格式转化问题,虽然做完了但是总是忘记,记不清楚,每次还都要查找资料.今天总结一下,加深印象. Cale ...
- AngularJS高级程序设计读书笔记 -- 模块篇
一. 模块基础 1. 创建模块 <!DOCTYPE html> <html ng-app="exampleApp"> <head> <ti ...
- centos7下创建数据库和用户
首先需要在centos系统下安装好mysql,这个我已经安装好了,这里就不把过程贴出来了. 第一步:使用root用户登录到mysql数据库: 第二步:创建一个mysql数据库.当第一步登录成功后,便会 ...