JAVA基础复习与总结<四> 抽象类与接口
抽象类(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基础复习与总结<四> 抽象类与接口的更多相关文章
- Java基础复习笔记系列 四 数组
Java基础复习笔记系列之 数组 1.数组初步介绍? Java中的数组是引用类型,不可以直接分配在栈上.不同于C(在Java中,除了基础数据类型外,所有的类型都是引用类型.) Java中的数组在申明时 ...
- Java基础知识强化18:抽象类、接口的区别 和 选择性实现接口方法
1.抽象类和接口的区别 抽象类里面可以有非抽象的方法(可以没有抽象方法),接口里只能有抽象方法. 抽象类中的抽象方法声明时不能有大括号,而接口中的所有方法都没有大括号. 抽象类(abstract c ...
- java基础知识(6)---抽象类与接口
抽象类: abstract抽象:不具体,看不明白.抽象类表象体现.在不断抽取过程中,将共性内容中的方法声明抽取,但是方法不一样,没有抽取,这时抽取到的方法,并不具体,需要被指定关键字abstract所 ...
- java基础复习记录
java基础复习记录(数组.对象.异常) 数组 数组的定义 数组是相同类型数据的有序集合.如:篮球队就是一个数组,队员球服上有号码,相当于索引.通过某一个的某一个号码来确认是某一个队员.数组中索引从0 ...
- Java基础复习笔记系列 九 网络编程
Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...
- Java基础复习笔记系列 八 多线程编程
Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...
- Java基础复习笔记系列 七 IO操作
Java基础复习笔记系列之 IO操作 我们说的出入,都是站在程序的角度来说的.FileInputStream是读入数据.?????? 1.流是什么东西? 这章的理解的关键是:形象思维.一个管道插入了一 ...
- Java基础复习笔记系列 五 常用类
Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...
- Java基础复习笔记基本排序算法
Java基础复习笔记基本排序算法 1. 排序 排序是一个历来都是很多算法家热衷的领域,到现在还有很多数学家兼计算机专家还在研究.而排序是计算机程序开发中常用的一种操作.为何需要排序呢.我们在所有的系统 ...
随机推荐
- lillietest 正态分布的拟合优度测试
函数 lillietest格式 H = lillietest(X) %对输入向量X进行Lilliefors测试,显著性水平为0.05.H = lillietest(X,alpha) %在水平alpha ...
- Oracle 数据库基础知识
depyno 部门编号 部门表 dname 部门名称 location 地址----------------------------------------empno 员工编号 员工表ename 员工 ...
- MVC加载分布页的三种方式
第一种: @Html.Partial("_分部页") 第二种: @{ Html.RenderPartial("分部页" ...
- 没有显示器如何SSH连接上树莓派
1.在用读卡器烧录系统后先用Linux虚拟机连接上读卡器,修改 sudo gedit /etc/wpa_supplicant/wpa_supplicant.conf 加入 network={ ssid ...
- 编写ROS程序--HelloROS
<机器人操作系统浅析>ch3学习记录 A Gentle Introduction to ROS 3.1 创建工作区(工作空间)和功能包 创建工作空间 ~/ros 我们称之为工作区目录 在工 ...
- HDU - 1062
格式错误2遍:没考虑到连续两个空格的情况,遇到空格最后要输出这个空格,因为题目只需要转换单词. 另外,开cin,cout加速要注意读入不能用scanf,printf,puts,getchar这些.ge ...
- 20175204 张湲祯 2018-2019-2《Java程序设计》2
20175204 张湲祯 2018-2019-2<Java程序设计>2 必做课下作业MyCP 要求 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP ...
- A Discriminative Feature Learning Approach for Deep Face Recognition
url: https://kpzhang93.github.io/papers/eccv2016.pdf year: ECCV2016 abstract 对于人脸识别任务来说, 网络学习到的特征具有判 ...
- 【转】让EntityManager的Query返回Map对象
在JPA 2.0中我们可以使用entityManager.createNativeQuery()来执行原生的SQL语句.但当我们查询结果没有对应实体类时,需使用entityManager.create ...
- mysql windows 安装 错误
1 免压缩版安装会经常提示需要c++库,还是要用安装版. 2 安装板默认在c盘,修改目录要注意目录权限. 3 要把datadir的data目录全部考到新目录下.