抽象方法:就是加上abstract关键字,然后去掉大括号,直接分号结束
抽象类:抽象方法所在的类,必须是抽象类。在class前面写上abstract

如何使用抽象类和抽象方法

  1. 不能直接创建new抽象类对象
  2. 必须用一个子类来继承抽象父类
  3. 子类必须覆盖重写抽象父类当中所有的抽象方法
    覆盖重写(实现):子类去掉抽象方法abstract关键字,然后补上方法体大括号
  4. 创建子类对象进行使用
public abstract class Animal{//这是一个抽象方法,代表吃东西,但是具体吃什么不确定public abstract void eat();
}
public class Cat extends Animal{System.out.println(“猫吃鱼”);
}
public static void main(String[] args){//Animal animal = new Animal();//错误写法,不能直接创建抽象类对象Cat cat = new Cat();cat.eat();
}

接口就是多个类的公共规范
接口是一种引用数据类型,最重要的内容就是其中的抽象方法

如何定义一个接口的格式
public interface 接口名称{
//接口内容
}

接口中包含的内容:
常量、抽象方法、默认方法、静态方法、私有方法

在任何版本的Java中,接口都能定义抽象方法
格式:
public abstract 返回值类型 方法名称(参数列表);

注意事项:

  1. 接口当中的抽象方法,修饰符必须是两个固定的关键字:public abstract
  2. 这两个关键字修饰符,可以选择性省略。
  3. 方法的三要素,可以随意定义
public interface MyInterfaceAbstract{public abstract void methodAbs1();abstract void methodAbs2();public void methodAbs3();void methodAbs4();}

接口的使用步骤

  1. 接口不能直接使用,必须有个“实现类”来“实现”该接口
    格式:
    public class 实现类名称 implements 接口名称{
    //…
    }

  2. 接口的实现类必须覆盖重写(实现)接口中所有的抽象方法
    实现:去掉abstract关键字,加上方法体大括号

  3. 创建实现类的对象,进行使用

注意事项:
如果实现类并没有覆盖重写接口中所有的抽象方法,那么这个实现类自己就必须是抽象类

public class Demo{public void main(String[] args){//MyInterfaceAbtract inter = new MyInterfaceAbstract();//错误写法,不能直接new接口对象使用//创建实现类的对象使用MyInterfaceAbstractImp impl = new MyInterfaceAbstractImpl();impl.methodAbs1();impl.methodAbs2();}
}
  1. 接口的默认方法,可以通过接口事项类对象,直接调用
  2. 接口的默认方法,也可以被接口事项类进行覆盖重写
public class Demo{public static void(String[] args){//创建了实现类对象MyInterfaceDefaultA a = new MyInterfaceDefaultA();a.methodAbs();//调用抽象方法,实际运行的是右侧实现类//调用默认方法,如果实现类当中没有,会向上找接口a.methodDefault();//这是新添加的默认方法MyInterfaceDefaultB b = new MyInterfaceDefaultB();b.methodAbs();b.methodDefault();//实现B覆盖重写了接口的默认方法}
}

接口里允许定义默认方法
格式:
public default 返回值类型 方法名称(参数列表){
方法体
}
备注:接口当中的默认方法,可以解决接口升级的问题

public interface MyInterfaceDefault{//抽象方法public abstract void methodAbs();//新添加了一个抽象方法//public abstract void methodAbs2();//新添加的方法,改成默认方法public default void methodDefault(){System.out.println(“这是新添加的默认方法”);}
}

接口当中允许定义静态方法
格式:
public static 返回值类型 方法名称(参数列表){
方法体
}

提示:就是将abstract或者default换成static即可,带上方法体

注意事项:不能通过接口实现类的对象来调用接口当中的静态方法
正确用法:通过接口名称,直接调用其中的静态方法

格式:
接口名称.静态方法名(参数);

public class Demo{public static void main(String[] args){//创建了实现类对象MyInterfaceStaticImpl impl = new MyInterfaceStaticImpl();//错误写法//impl.methodStatic();//直接通过接口名称调用静态方法MyInterfaceStatic.methodStatic();}
}

接口当中允许定义私有方法

  1. 普通私有方法,解决多个默认方法之间重复代码问题
    格式:
    private 返回值类型 方法名称(参数列表){
    方法体
    }

  2. 静态私有方法,解决多个静态方法之间的重复代码问题
    格式:
    private static 返回值类型 方法名称(参数列表){
    方法体
    }

public interface MyInterfacePrivateA{public default void methodfault1(){System.out.println(“默认方法1”);methodCommon();}public default void methodfault2(){System.out.println(“默认方法2”);methodCommon();}public default void methodCommon(){System.out.println(“AAA”);System.out.println(“BBB”);System.out.println(“CCC”);}
}

接口当中也可以定义成员变量,
但是必须使用public static final三个关键字进行修饰
从效果上看,这其实就是接口的常量
格式:
public static final 数据类型 常量名称 = 数据值
备注
一旦使用final关键字进行修饰,说明不可改变

注意事项:

  1. 接口当中的常量,可以省略public static final
  2. 接口当中的常量,必须进行赋值,不能不赋值
  3. 接口中常量的名称,使用完全大写的字母,用下划线进行分隔
public interface MyInterfaceConst{//这其实就是一个常量,一旦赋值,不可以修改public static final int NUM_OF_MY_CLASS = 12;
}
public class Demo{public static void main(String[] args){//访问接口当中的常量System.out.println(MyInterfaceConst.NUM_OF_MY_CLASS);}
}

继承父类并实现多个接口
使用接口时,需要注意:

  1. 接口是没有静态代码块或者构造方法的
  2. 一个类的直接父类是唯一的,但是一个类可以同时实现多个接口
    格式:
    public class MyInterfaceImpl implements MyInterfaceA,MyInterfaceB{
    //覆盖重写所有的抽象方法
    }
  3. 如果实现类所实现的多个接口当中,存在重复的抽象方法,那么只需要覆盖重写一次即可
  4. 如果实现类没有覆盖重写所有接口当中的所有抽象方法,那么实现类就必须是一个抽象类
  5. 如果实现类所实现的多个接口当中,存在重复的默认方法,那么实现类一定要对冲突的默认方法进行覆盖重写。
  6. 一个类如果直接父类当中的方法,和接口当中的默认方法产生了冲突,优先用父类当中的方法。

接口之间的多继承
1.类与类之间是单继承的,直接父类只有一个
2.类与接口之间是多实现的,一个类可以实现多个接口
3.接口与接口之间是多继承的

注意事项:
1.多个父接口当中的抽象方法如果重复,没关系
2.多个父接口当中的默认方法如果重复,那么子接口必须进行默认方法的覆盖重写,而且而且带着default关键字。

Java学习笔记_抽象/接口相关推荐

  1. JAVA学习笔记 15 - 函数式接口、Lambda表达式和方法引用

    本文是Java基础课程的第十五课.主要介绍在JDK8中,Java引入的部分新特性,包括函数式接口.Lambda表达式和方法引用.这些新特性使得Java能够在按照面向对象思想进行开发的基础上,融合函数式 ...

  2. JAVA学习笔记_银行账户系统

    大家好,我是一枚JAVA学习的小白,初次来到SCND还请多多指教!!!! 最近上编程课学习都挺晚的,没时间逛论坛了,今天休息正好也赶上线上,所以来发点学习笔记,一起讨论学习.(看我这个标点符号就知道我 ...

  3. 马士兵 java 学习笔记_马士兵java教程笔记1

    ---恢复内容开始--- 前记 虽然已经是个研究生了,但是会的东西还是特别的少 甚至连java都不能说是很会 所以准备从现在开始能好好的学习java 变成java master 标识符 标识符是由字母 ...

  4. Java学习笔记14(接口+工厂模式)

    文章目录 接口 接口的特点: **为什么要接口** 工厂模式 接口 Java不支持多重继承.有了接口,就可以得到多重继承的效果. 接口(interface)是抽象方法和常量值的定义的集合. 从本质上讲 ...

  5. #Java学习总结面向对象+抽象+接口

    1.类和对象 类 类是对现实生活中一类具有共同属性和行为的事务的抽象:类是对象的数据类型,类是具有相同属性和行为的一组对象的集合.简单理解:类就是对现实事务的一种描述. 类的组成: 属性:指事物的特征 ...

  6. Java学习笔记_字符串/静态static

    字符串的特点 字符串的内容永不可变 正是因为字符串不可改变,所以字符串是可以共享使用的 字符串效果上相当于是char[]字符数组,但是底层原理是byte[]字节数组 创建字符串的常见3+1种方式 三种 ...

  7. Java学习笔记_类和对象

    ·类:是一组相关属性和行为的集合,可以看成是一类事务的模板,使用事物的属性特征和行为特征来描述该类事物. ·属性:该事物的状态信息 ·行为:就是该事物能够做什么 ·对象:一类事物的具体体现,对象是类的 ...

  8. Java学习笔记_多态/内部类

    多态的格式与使用 代码当中体现多态性,其实就是一句话,父类引用指向子类对象 格式: 父类名称 对象名 = new 子类名称(); 或者 接口名称 对象名 = new 实现类名称(); public c ...

  9. Java学习笔记_继承

    继承的格式 在继承关系中,"子类就是一个父类".也就是说,子类可以被当作父类看待 例如父类是员工,子类是讲师,那么"讲师就是一个员工" 定义父类的格式:(一个普 ...

最新文章

  1. Python基础 2
  2. 机器性能这么好,为什么点击右键弹出菜单还这么慢?
  3. 动手造轮子:实现一个简单的依赖注入(二) --- 服务注册优化
  4. Summer Training day6 coseforces339D 线段树、位操作
  5. 工作114:传参控制
  6. 在 Visual C++ 中使用内联汇编
  7. 【转载】安装pip、pyinstaller并将py脚本打包成exe文件
  8. 手动为linux系统添加新用户——过程详解
  9. 因特尔g41显卡 linux驱动,英特尔g41显卡驱动
  10. 扩展GridView控件(3) - 根据按钮的CommandName设置其客户端属性
  11. Java后台调用API的方法
  12. 快光慢光的产生原理及群速度相速度的定义
  13. IDLE的启动和设置
  14. 基于java的文章发布系统_基于JavaSSH的文章发布系统的设计任务书
  15. 网站服务器死机是什么意思,服务器宕机是什么意思?
  16. python 利用utf-8编码判断中文英文字符
  17. [Delphi] Windows 外壳扩展编程入门实例
  18. 史上最全ospf hcia hcip hcie必备
  19. 智慧矿山GIS可视化运营管理平台解决方案
  20. 最简单windows7 硬盘安装工具 nt6 hdd installer v2.8.1,图文、原理

热门文章

  1. Android 不显示标题栏和全屏的设置方法
  2. Android中TextView中string的特殊符号显示的方法
  3. oracle end backup,oracle-backup-hot backup
  4. MyBatis动态SQL底层原理分析 与 JavaScript中的Date对象,以及UTC、GMT、时区的关系...
  5. TabLayout 与 FragmentTabHost
  6. 【转】Win8/8.1/Win7小技巧:揪出C盘空间占用的真凶
  7. FOSRestBundle功能包:自动路由生成-单REST风格控制器
  8. Lotus 下部门间用户的移动操作
  9. xx置业有限公司建议篇
  10. 经典C/C++面试题