抽象类(Abstract Class

是一种模版模式。抽象类为所有子类提供了一个通用模版,子类可以在这个模版基础上进行扩展。通过抽象类,可以避免子类设计的随意性。通过抽象类,我们就可以做到严格限制子类的设计(子类必须实现抽象方法)  ,使子类之间更加通用。

要点:

1、有抽象方法的类只能定义为抽象类。

2、抽象类不能实例化,不能用new来实例化抽象类,即不能用来创建对象。

3、抽象类可以包含属性、方法、构造方法。但是构造方法不能用来new实例,只能用来被子类调用。

4、抽象类只能用来继承。

5、抽象方法必须被子类实现。 抽象方法必须是protect和public。

6、抽象类和抽象方法前面要加上abstract关键字来修饰。

抽象类的重要优势就是把程序的设计和实现给分开了。

package TestAbstract;

public abstract class Animal {   //包含了抽象方法的类一定是抽象类

public abstract void run(); //抽象方法,没有实现只有声明

public void breath(){

System.out.println("呼吸"); //抽象类里面也可以定义普通方法

}

String str; //可以定义普通属性

}

class Cat extends Animal{   //子类必须实现抽象父类的抽象方法,否则编译不通过

public void run(){

System.out.println("猫步小跑");

}

}

class Dog extends Animal{

public  void run(){

System.out.println("狗跑");

}

}

接口(Interface)

比抽象类还要抽象(抽象类里面还能定义具体方法)

接口就是规范

为什么需要接口?接口和抽象类的区别?

1、接口就是比抽象类还要抽象的抽象类,可以更加规范地对子类进行约束。全面地专业地实现了:规范和具体实现的分离。

2、接口就是规范,定义的是一组规则,体现了现实世界中”如果你是。。。则必须能。。“的思想

3、接口的本质是契约,就像人间法律。制定好了以后大家都能遵守

4、项目的具体需求是多变的,我们必须以不变应万变才能从容开发,此处的”不变“就是”规范“。因此,我们开发项目往往都是面向接口的编程。

注意:

1、子类通过implements来实现接口中的规范

2、接口不能创建实例,但是可以用于声明引用变量类型

3、一个类实现了接口,必须实现接口中所有的方法,并且这些方法只能是public

4、接口支持多继承

//接口的规范

public interface InterfaceTest {   //定义一个接口,编译以后生成的还是class文件

//接口中只有:常量和抽象方法

//抽象方法指的是只有方法声明而并没有具体实现的方法

String MAX_GREAD = "BOSS";

/* public static final */ int MAX_SPEED = 120;

//接口中定义常量时写或不写总有静态说明 (本来想定义一个变量,但这里隐式直接划定为常量)

public void test01();

public int test02(int a ,int b);

//此处public也可以不声明,因为在接口中方法必然是公开的

}

//意义在于设计与实现分离

public class MyClass implements InterfaceTest {

@Override

public void test01 () {                                         //一个类实现了接口,必须实现接口中所有方法

String r = InterfaceTest.MAX_GREAD;          //并且这些方法只能是public

System.out.println("test01");

}

@Override

public int test02 ( int a, int b ) {

System.out.println("MyClass.test02()");

return a+b;

}

}

//接口的多继承

public interface InterfaceA {

void aaa();

}

interface  InterfaceB{

void bbb();

}

interface InterfaceC extends InterfaceA,InterfaceB{

void ccc ();

}

class  TesClass implements  InterfaceC{  //证明了接口是有多继承机制

@Override

public void aaa () {

}

@Override

public void bbb () {

}

@Override

public void ccc () {

}

}

JAVA基础复习与总结<四> 抽象类与接口的更多相关文章

  1. Java基础复习笔记系列 四 数组

    Java基础复习笔记系列之 数组 1.数组初步介绍? Java中的数组是引用类型,不可以直接分配在栈上.不同于C(在Java中,除了基础数据类型外,所有的类型都是引用类型.) Java中的数组在申明时 ...

  2. Java基础知识强化18:抽象类、接口的区别 和 选择性实现接口方法

    1.抽象类和接口的区别 抽象类里面可以有非抽象的方法(可以没有抽象方法),接口里只能有抽象方法. 抽象类中的抽象方法声明时不能有大括号,而接口中的所有方法都没有大括号.  抽象类(abstract c ...

  3. java基础知识(6)---抽象类与接口

    抽象类: abstract抽象:不具体,看不明白.抽象类表象体现.在不断抽取过程中,将共性内容中的方法声明抽取,但是方法不一样,没有抽取,这时抽取到的方法,并不具体,需要被指定关键字abstract所 ...

  4. java基础复习记录

    java基础复习记录(数组.对象.异常) 数组 数组的定义 数组是相同类型数据的有序集合.如:篮球队就是一个数组,队员球服上有号码,相当于索引.通过某一个的某一个号码来确认是某一个队员.数组中索引从0 ...

  5. Java基础复习笔记系列 九 网络编程

    Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...

  6. Java基础复习笔记系列 八 多线程编程

    Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...

  7. Java基础复习笔记系列 七 IO操作

    Java基础复习笔记系列之 IO操作 我们说的出入,都是站在程序的角度来说的.FileInputStream是读入数据.?????? 1.流是什么东西? 这章的理解的关键是:形象思维.一个管道插入了一 ...

  8. Java基础复习笔记系列 五 常用类

    Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...

  9. Java基础复习笔记基本排序算法

    Java基础复习笔记基本排序算法 1. 排序 排序是一个历来都是很多算法家热衷的领域,到现在还有很多数学家兼计算机专家还在研究.而排序是计算机程序开发中常用的一种操作.为何需要排序呢.我们在所有的系统 ...

随机推荐

  1. 吐血记录微信小程序授权获取Unionid及linux下使用bouncycastle解密用户数据 遇到的坑

    背景 公司小程序上线了,发现系统无法拿到一些用户的UniondID.但是上线前的测试一切都是正常的. 坑1 经排查,发现一些用户通过下面的接口无法得到unionid https://api.weixi ...

  2. JGUI源码:DataTable固定列样式(20)

    本来感觉这个固定列很容易实现的,一般都是几个table组合实现,真正自己从头做的时候,发现有很多坑,本文只是固定列原理,真正实现datatable的话,代码量比较大的,后续再进行完善. 使用左中右三个 ...

  3. ajax跨域例子

    例子 https://github.com/ruanyf/react-demos/blob/master/demo12/index.html 此网页代码运行在本地, 是可以访问 github 数据的. ...

  4. [Reinforcement Learning] 马尔可夫决策过程

    在介绍马尔可夫决策过程之前,我们先介绍下情节性任务和连续性任务以及马尔可夫性. 情节性任务 vs. 连续任务 情节性任务(Episodic Tasks),所有的任务可以被可以分解成一系列情节,可以看作 ...

  5. IDEA中 GIT与SVN版本控制插件的切换

    https://www.cnblogs.com/yccmelody/p/7794220.html

  6. sqlmap注入入门

    sqlmap注入入门 sqlmap的用法: ​ linux中: sqlmap [选项] ​ Windows中: python sqlmap [选项] 常用的参数及含义: 目标 ​ -d DIRECT ...

  7. Asp.net Core导出Excel

    本篇文章是在MVC设计模式下,基于windows系统的Excel导出 1.前台的实现不用我多说了吧,加一个a标签链接地址跳到它所调用的方法里面,可以根据当前页面的查询条件去传值,从而查询出你想要的数据 ...

  8. 微信商户/H5支付申请 被拒原因:网站存在不实内容或不安全信息

    看到这张图片,申请H5支付的朋友估计是崩溃的,被拒的原因是网站存在不实内容或不安全信息. 解决方法有两种: 针对不安全内容,则是微信支付审核团队认为你的网站存在安全漏洞的,需要修复. 针对不实内容,则 ...

  9. 普通用户授予select any table 权限

    基于应用的需要,让普通用户有访问sys表的权限,于是就想到了select any table 的权限,可是当授权以后发现还是不能访问sys的表,经过查一系列资料,发现select any table不 ...

  10. 【转】pyhton之Reportlab模块——生成pdf文件

    [转]pyhton之Reportlab模块 reportlab模块是用python语言生成pdf文件的模块 安装:pip install reportlab 模块默认不支持中文,如果使用中文需要注册 ...