抽象类

  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自学手记——接口的更多相关文章

  1. Java自学手记——struts2

    struts2框架 struts2是一种基于MVC模式的框架,是在struts1的基础上融合了xwork的功能. struts2框架预处理了一些功能: >请求数据自动封装, >文件上传的功 ...

  2. Java自学手记——servlet3.0新特性

    servlet3.0出来已经很久了,但市场上尚未普遍应用,servlet3.0有三个比较重要的新特性:使用注解来代替配置文件,异步处理以及上传组件支持. 支持servlet3.0的要求:MyEclip ...

  3. Java自学手记——泛型

    泛型在集合中的应用 泛型在集合经常能看到,有两个好处:1.把运行时出现 的问题提前至了编译时:2.避免了无谓的强制类型转换. 用法:两边泛型的类型必须相同,可允许一边不写,只是为了兼容性,并不推荐. ...

  4. Java自学手记——Java中的关键字

    Java中的一些关键字对于初学者来说有时候会比较混乱,在这里整理一下,顺便梳理一下目前掌握的关键字. 权限修饰符 有四个,权限从大到小是public>protected>defaul(无修 ...

  5. Java自学手记——多态

    对象转型 学习多态前先明白一个叫对象转型的概念,如: class Animal{ void sleep(){ System.out.println("睡觉"); } } class ...

  6. Java自学手记——注解

    注意区分注释和注解,注释是给人看的,注解是给程序看的. 注解的作用是代替配置文件,在servlet3.0中,就可以不再使用web.xml文件,而是所有配置都是用注解!比如注解类 @WebServlet ...

  7. Java自学手记——集合

  8. Java自学-集合框架 List接口

    ArrayList与List接口 步骤 1 : ArrayList和List ArrayList实现了接口List 常见的写法会把引用声明为接口List类型 注意:是java.util.List,而不 ...

  9. 【转】JAVA自学之路

    JAVA自学之路 一: 学会选择 为了就业,不少同学参加各种各样的培训. 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3G.测试等. 那么究竟应该选择什么方向 ...

随机推荐

  1. 开源网络操作系统--VyOS

    User Guide Jump to: navigation, search Contents 1 Introduction 2 Installation 3 Using the Command-Li ...

  2. R语言快速深度学习进行回归预测(转)

    深度学习在过去几年,由于卷积神经网络的特征提取能力让这个算法又火了一下,其实在很多年以前早就有所出现,但是由于深度学习的计算复杂度问题,一直没有被广泛应用. 一般的,卷积层的计算形式为: 其中.x分别 ...

  3. js继承之原型链继承

    面向对象编程都会涉及到继承这个概念,JS中实现继承的方式主要是通过原型链的方法. 一.构造函数.原型与实例之间的关系 每创建一个函数,该函数就会自动带有一个 prototype 属性.该属性是个指针, ...

  4. vue+vux+axios+vuex+vue-router的项目的理解

    本文主要是讲解项目前期的工作,后期考虑再详细说明. 作为一个技术团队如果你们团队选择了上面的技术栈,这说明你们的技术团体对于vue有很熟练的掌握了.在这里我想说明的是前期架构的重要.这里有一遍博客写的 ...

  5. Exploit-Exercises nebule 旅行日志(一)

    exploit-exercises.com provides a variety of virtual machines, documentation and challenges that can ...

  6. 配置Nginx作为web server详解

    keepalived+nginx:实现高可用 corosync+ngin Nginx: 轻量级的反向代理 web服务器 处理静态文件,索引文件以及自动索引,打开文件描述缓存 使用缓存加速反向代理,简单 ...

  7. 页面中的平滑滚动——smooth-scroll.js的使用

    正常的本页面锚链接跳转的时候跟PPT似的,特别生硬,用户体验非常差. 这时候我们就可以借助smooth-scroll.js这个插件,来实现本页面的平滑的跳转. 1首先,导入必须的JS文件 <sc ...

  8. DOM知识梳理

    DOM 我们知道,JavaScript是由ECMAScript + DOM + BOM组成的.ECMAScript是JS中的一些语法,而BOM主要是浏览器对象(window)对象的一些相关知识的集合. ...

  9. 做电子商务的七个SEO技巧

    随着电子商务网站的迅速增加,为了适应不断增长的网络客户多样化需求.越来越多的人注意到,从网站上购买既节省了时间和金钱,因此电子商务社区越来越激烈.网站需要具有独特的设计风格和功能,而不是网站内容的不断 ...

  10. 使用可视化图表对 Webpack 2 的编译与打包进行统计分析

    此文主要对使用可视化图表对 Webpack 2 的编译与打包进行统计分析进行了详细地讲解,供您更加直观地参考. 在之前更新的共十七章节中,我们陆续讲解了 Webpack 2 从配置到打包.压缩优化到调 ...