Java 笔记-抽象类,接口
一.什么是抽象类
- 简单理解的来说就是不够具体的类,具体的反义词—抽象.
- 比如说一个图形,这就不够具体,一个图形可以具体的细分为三角形,圆形,长方形等等,三角形又可以更加具体,等腰三角形,等边三角形等等 .而抽象类就是将明显具有自己独特特征的具体类模糊化,将大家都有的共同特征抽象出来,比如说医生类,护士类,士兵类,可以通通抽象为—人类.他们都拥有人类的特征,比如说吃饭,睡觉,娱乐之类的,这些执行的方法都是相似的代码,用抽象类抽象出来,再通过子类继承实现就可以大大减少代码量(偷懒+_+).
- 抽象类也是普通类前加上了abstarct关键字,同样,一个普通方法前加上了这个关键字也就成为了抽象方法.
二.如何使用抽象类
- 不能直接创建(new)抽象类对象
- 必须用一个子类来继承抽象类
- 子类必须覆盖重写抽象父类中的所有抽象方法,否则会编译报错,除非该子类也是抽象类
覆盖重写(实现):子类去掉抽象方法的abstract关键字,然后然后方法体大括号 - 创建子类进行使用
注意:
- 抽象类中,可以有构造方法(有默认的super()),是供子类创建对象时,初始化父类成员使用的
- 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类
三.接口
1. 什么是接口
接口就像是一种公共规范标准,如同国标,众多工厂其实互相不认识,不联系,但造出来的东西就是能够一起使用.比如也像一个USB接口,U盘,充电宝,随身小风扇都有这个借口,U盘可以插在苹果电脑上,也可以插在DELL电脑上,因为大家共同遵守着一种规范标准.
接口是一种引用数据类型,最重要的内容就是其中的:抽象方法。
如何定义一个接口的格式:
public interface 接口名称
{// 接口内容
}
注意:换成了关键字interface之后,编译生成的字节码文件仍然是:.java --> .class。
2. 如何使用接口
如果是Java 7,那么接口中可以包含的内容有:
- 常量
- 抽象方法
如果是Java 8,还可以额外包含有:
- 默认方法
- 静态方法
如果是Java 9,还可以额外包含有:
- 私有方法
接口使用步骤:
- 接口不能直接使用,必须有一个“实现类”来“实现”该接口。
格式:
public class 实现类名称 implements 接口名称{// ...
}
- 接口的实现类必须覆盖重写(实现)接口中所有的抽象方法。
实现:去掉abstract关键字,加上方法体大括号。 - 创建实现类的对象,进行使用。
接口中的常量
注意:
- 接口当中的常量,可以省略 public static final, 不写也默认是这样
- 接口当中的常量必须进行复制,不能不赋值
- 接口中常量使用完全大写字母,用下划线进行分割(推荐命名规则
接口中的抽象方法
注意:
- 如果实现类并没有覆盖重写接口中所有的抽象方法,那么这个实现类自己就必须是抽象类。
在任何Java版本中,接口都能定义抽象方法
格式:
public abstract 返回值类型 方法名称(参数列表)
注意:
- 接口当中的抽象方法,修饰符必须是两个固定的关键字: public abstract
- 这两个关键字修饰符,可以选择性省略
- 方法的三要素:返回值类型,方法名称,参数列表 可以根据业务情况随意定义
- 如果实现类所实现的多个接口当中,存在重复的抽象方法,那么只需要覆盖重写一次即可。
- 如果实现类没有覆盖重写所有接口当中的所有抽象方法,那么实现类就必须是一个抽象类。
接口中的默认方法
从Java 8开始,接口里允许定义默认方法。
格式:
public default 返回值类型 方法名称(参数列表)
{方法体
}
接口当中的默认方法,可以解决接口升级的问题
public interface MyInterfaceDefault
{// 抽象方法public abstract void methodAbs();// 新添加了一个抽象方法// public abstract void methodAbs2();// 新添加的方法,改成默认方法public default void methodDefault() {System.out.println("这是新添加的默认方法");}}
注意
- 如果实现类所实现的多个接口当中,存在重复的默认方法,那么实现类一定要对冲突的默认方法进行覆盖重写。
- 一个类如果直接父类当中的方法,和接口当中的默认方法产生了冲突,优先用父类当中的方法
接口中的静态方法
接口当中定义静态方法
格式:
public static 返回值类型 方法名称(参数列表){}
注意:
不能通过接口实现类的对象来调用接口当中的静态方法
正确用法:通过接口名称,直接调用其中的静态方法接口是没有静态代码块或者构造方法的。
一个类的直接父类是唯一的,但是一个类可以同时实现多个接口。
格式:
public class MyInterfaceImpl implements MyInterfaceA, MyInterfaceB{// 覆盖重写所有抽象方法
}
格式:
接口名称.静态方法名(参数);
public interface MyInterfaceAbstract //接口
{public static final int num = 10;////这是一个抽象方法public abstract void method1();//下面的都是抽象方法public void method2();abstract void method3();void method4();public default void method05(){System.out.println("我是在接口里新添加的默认方法");}public static void staticMethod(){System.out.println("我是接口里的静态方法");}
}
public class MyInterfaceAbstractImpl implements MyInterfaceAbstract
{ //用一个实现类继承接口@Overridepublic void method1(){System.out.println("这是第一个抽象方法");}@Overridepublic void method2(){System.out.println("这是第2个抽象方法");}@Overridepublic void method3(){System.out.println("这是第3个抽象方法");}@Overridepublic void method4(){System.out.println("这是第4个抽象方法");}}
public static void main(String[] args) //主方法{MyInterfaceAbstractImpl im = new MyInterfaceAbstractImpl();im.method1();im.method2();im.method05();//接口里新添加的默认方法im.method3();//通过接口名称来调用静态方法MyInterfaceAbstract.staticMethod();}
接口中的私有方法
- 普通私有方法,解决多个默认方法之间重复的代码问题
格式:
private 返回值类型 方法名称(参数列表) - 静态私有方法 解决多个静态方法之间重复代码的问题
private static 返回值类型 方法名称(参数列表)
四.接口小结
接口内容小结:
在Java 9+版本中,接口的内容可以有:
成员变量其实是常量,格式:
public static final 数据类型 常量名称 = 数据值;
注意:
常量必须进行赋值,而且一旦赋值不能改变。
常量名称完全大写,用下划线进行分隔。接口中最重要的就是抽象方法,格式:
public abstract 返回值类型 方法名称(参数列表);
注意:
实现类必须覆盖重写接口所有的抽象方法,除非实现类是抽象类。从Java 8开始,接口里允许定义默认方法,格式:
public default 返回值类型 方法名称(参数列表) { 方法体 }
注意:
默认方法也可以被覆盖重写从Java 8开始,接口里允许定义静态方法,格式:
public static 返回值类型 方法名称(参数列表) { 方法体 }
注意:
应该通过接口名称进行调用,不能通过实现类对象调用接口静态方法从Java 9开始,接口里允许定义私有方法,格式:
普通私有方法:private 返回值类型 方法名称(参数列表) { 方法体 }
静态私有方法:private static 返回值类型 方法名称(参数列表) { 方法体 }
注意:
private的方法只有接口自己才能调用,不能被实现类或别人使用。抽象类可以有构造方法,接口中不能有构造方法
抽象类可以有普通成员变量,接口中没有普通成员变量.
类与抽象类之间是单继承的,直接父类只有一个。
类与接口之间是多实现的。一个类可以实现多个接口。
接口与接口之间是多继承的。
多个父接口当中的抽象方法如果重复,没关系。
多个父接口当中的默认方法如果重复,那么子接口必须进行默认方法的覆盖重写,(要带着default关键字)
抽象类与接口区别图
Java 笔记-抽象类,接口相关推荐
- java中抽象类 接口_java中的抽象类与接口
1.抽象类的定义 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 2.简单实例 ...
- 【java笔记】接口的定义,接口的使用
java不支持多继承性,即一个类只能有一个父类.(单继承性) 为了解决单继承的缺点,java使用了接口 接口是一种引用数据类型,最重要的内容是抽象方法 (public) interface 接口名称{ ...
- 0514课堂笔记--抽象类-接口
1. 抽象类 1.1 概念 Java中可以定义被abstract关键字修饰的方法,这种方法只有声明,没有方法体,叫做抽象方法. Java中可以定义被abstract关键字修饰的类,被abstract关 ...
- 【Java】抽象类接口
目录 1.抽象类 2.接口 2.1实现多个接口 2.2接口之间的关系 2.3接口使用实例 2.3.1Comparable接口 2.3.2Comparator接口 2.3.2Clone接口 2.4抽象类 ...
- java中 抽象类+接口
用法: 在abstract class方式中,类可以有自己的数据成员,也可以有非 abstract的成员方法,而在interface方式的实现中,类只能够有静态的不能被修改的数据成员(也就是必须是st ...
- 10-01 Java 类,抽象类,接口的综合小练习--运动员和教练
运动员和教练的案例分析 运动运和教练的案例 代码实现 /*教练和运动员案例乒乓球运动员和篮球运动员.乒乓球教练和篮球教练.为了出国交流,跟乒乓球相关的人员都需要学习英语.请用所学知识:分析,这个案例中 ...
- java 类 抽象类 接口_Java抽象类和接口
抽象类和接口 一.抽象类和抽象方法 对于抽象类,首先需要介绍抽象方法,而抽象类因抽象方法的存在而存在 1.抽象方法 (1)必要性: 有些父类方法不确定如何写方法体,但是对于继承它的子类又必须用到这个方 ...
- 我的JAVA笔记--抽象类
抽象类 抽象类的主要作用在于对子类中覆写方法进行约定,在抽象类里定义一些抽象方法,抽象方法是使用了abstract关键字并且未提供方法体的方法,抽象方法所在的类必须为抽象类(也可能是接口,但接口中所有 ...
- Java之抽象类接口
文章目录 写在前面 抽象类 抽象类的特点 接口 接口的特点 写在前面 我们要来学习一些更加抽象的东西了,我们学习了多态,知道了什么是动态绑定,不过这还不够,我们一起来看看抽象类,同时我们一起学习什么是 ...
最新文章
- Web Service (二) CXF自动发布Web Service(No Spring)
- 大型网站技术架构(四)网站的高性能架构
- java string输入_怎么让Java获取用户输入的字符串
- Java SE 知识点
- ImportError: libgthread-2.0.so.0: cannot open shared object file: No such file or directory
- 开启sql server2008的1433端口
- 光盘安装linux16.04,cobbler安装ubuntu 16.04巨慢
- mysql自带压测工具--mysqlslap
- python 异常 模块 包
- 蓝桥杯 ALGO-120 算法训练 学做菜
- python语法31[变量的作用域+global]
- Scratch妙笔生花
- 一位仁兄对于项目管理的精辟见解
- 你写的api接口代码真是_有哪些好玩的免费的API接口?
- 干货!____UI设计中那些创意的图标怎么做
- unity 创建自己的像素地图 TileMap
- 福建计算机等级考试停考,惊闻|福建省要停考计算机等级考试?!
- 树莓派Pico C/C++语言开发
- 工作中的纠结——区分于底层OR界面
- 【2020HBU天梯赛训练】7-17 PTA使我精神焕发