接口
接口就是一种公共的规范标准 是一种引用数据类型
定义格式
public interface 接口名称{}
java7 中接口可以包含常量,抽象方法;Java8 还可以额外包含默认方法,静态方法;Java 9 还可以额外包含私有方法
public interface MyInterfaceAbstract{
//这是一个抽象方法
public abstract void methodAbs();
//接口中的抽象方法,修饰符必须是两个固定的关键字:public abstract
//这两个关键字可以选择性的省略
abstract void methodAbs2();
public void methodAbs3();
void methodAbs4();
}
接口的抽象方法使用
接口使用步骤:
-
接口不能够直接使用,必须有一个“实现类”来实现该接口
格式:
public class 实现类名称 implements 接口名称{}
接口的实现类必须覆盖重写接口中所有的抽象方法
创建实现类对象(new),进行使用
//按照定义格式定义一个接口
//public interface 接口名称{}
public interface InterfaceDemo {
//接口里面可以有抽象方法,普通方法
//定义一个抽象方法
public abstract void methodAbs1();
//默认方法
public abstract void methodAbs2();
}
public class InterfaceDemoImpl implements InterfaceDemo{
//回顾一些重写的概念
//方法名和形参列表一样
//权限修饰符必须大于或者等于父类的权限修饰符
//子类的返回值类型必须小于或者等于父类的返回值类型
@Override
public void methodAbs1() {
System.out.println("天下武功,唯快不破");
}
@Override
public void methodAbs2() {
System.out.println("认真的人,自带光芒");
}
}
public class newInterfaceDemo {
public static void main(String[] args){
InterfaceDemoImpl inter = new InterfaceDemoImpl();
inter.methodAbs1();
inter.methodAbs2();
}
}
注意事项
如果实现类并没有覆盖重写接口中的所有的抽象方法,那么这个实现类就必须是抽象类
接口的默认方法定义
public interface InterfaceDemo {
/*
java 8开始,接口允许定义默认方法
格式:
public default 返回值类型 方法名称(参数列表){
方法体
}
备注:接口当中的默认方法,可以解决接口升级的问题
默认方法可以有方法体
*/
public abstract void methodAbs1();
public default void methodAbs2(){
System.out.println("我是默认方法,可以解决升级问题");
}
public class InterfaceDemoImpl implements InterfaceDemo{
@Override
public void methodAbs1() {
System.out.println("天下武功,唯快不破");
}
//我在这里并没有重写public default void methodAbs2()
//实现接口自动继承方法
}
public class newInterfaceDemo {
public static void main(String[] args){
InterfaceDemoImpl inter = new InterfaceDemoImpl();
//接口的默认方法也是可以覆盖重写的
//这里就不写了
inter.methodAbs1();
inter.methodAbs2();
}
}
接口的静态方法的定义
/*
格式
public static 返回值类型 方法名称(参数列表){}
*/
public interface InterfaceStatic {
public static void method1(int a,int b){
System.out.println("今天要敲"+a*b+"行代码");
}
}
public class InterfaceStaticImpl {
//接口中的静态方法的使用
public static void main(String[] args) {
//直接通过接口名称.静态方法的名称调用即可
InterfaceStatic.method1(15,67);
}
}
接口的私有方法定义
/*
问题描述:
我们需要抽取一个共有方法,用来解决两个默认方法之间重复代码的问题
但是这个共有方法,不应该被是实现类使用,应该私有化的
解决方案
从Java 9 开始,接口当中允许定义私有方法
1.普通私有方法,解决多个默认方法之间重复代码问题
格式
private 返回值类型 方法名称(参数列表){}
2.静态私有方法,解决多个静态方法之间重复代码问题
格式:
private static 返回值类型 方法名称(参数列表){}
*/
public interface InterfaceStatic {
public default void method1(){
System.out.println("认真的人,自带光芒");
method3();
}
public default void method2(){
System.out.println("作日的最佳表现,是今日的最低要求");
method3();
}
private void method3(){
System.out.println("乘风破浪会有时,直挂云帆济沧海");
}
}
public class InterfaceStaticImpl implements InterfaceStatic{
public static void main(String[] args) {
InterfaceStaticImpl inter = new InterfaceStaticImpl();
inter.method1();
inter.method2();
//接口中的静态方法的使用
//想要使用接口的方法,必须要实现接口
//实现完接口后,需要new对象使用
}
}
接口的常量定义和使用
1.接口当中的常量,可以省略public static final ,注意,不写也照样是这样
接口当中的常量,必须进行复制,不赋值不能使用
接口当中的常量名称,使用完全大写的字母,用下划线进行分割
使用格式
接口名称.常量名称
多态
多态的前提:extends继承或者Implements实现,
一个对象拥有多种形态,这就是:对象的多态性
代码当中体现多态性:父类引用指向子类对象
多态格式
父类名称 对象名 = new 子类名称();
或者
接口名称 对象名= new 实现类名称();
多态中成员变量的使用特点
//访问成员变量的两种方式
//1.直接通过对象名称访问成员变量:看等号左边是谁,优先用谁,没有向上找
//2.间接通过成员方法访问
public class Fu {
//子类也有相同的成员变量num
int num = 10;
public void shownum(){
System.out.println(num);
}
}
public class Zi extends Fu{
//与父类相同的成员变量num
int num = 20;
//子类特有的成员变量
int num1 =30;
//重写方法
@Override
//重写了父类的方法,
public void shownum(){
System.out.println(num);
}
}
public class Demo01MultiField {
public static void main(String[] args) {
//使用多态的写法,父类引用指向子类对象
Fu obj = new Zi();
//等号左边是Fu,优先使用左边的的成员变量,没有则向上找
System.out.println(obj.num);//10
//不可能向下找
//System.out.println(obj.num1);编译报错
//shownum属于Fu,则使用Fu的成员变量//10
//当子类覆盖重写父类,就属于Zi类//20
obj.shownum();
}
}
多态中成员方法的使用特点
public class Fu {
//成员方法的访问规则
//看new的是谁,就优先用谁,没有则向上找
public void method(){
System.out.println("我是父类");
}
public void methodFu(){
System.out.println("我是父类特有方法");
}
}
public class Zi extends Fu{
public void method(){
System.out.println("我是子类");
}
public void methodZi(){
System.out.println("我是子类特有方法");
}
}
java
public class Demo01MultiField {
public static void main(String[] args) {
Fu obj = new Zi();//多态
obj.method();// 父子都有,new的是zi,优先用zi //输出结果我是子类
obj.methodFu();//子类没有,向上找, //输出结果我是父类特有方法
}
}
多态中成员变量访问规则和成员方法访问规则总结
成员变量:看左边,左边是哪一个类就优先使用哪一个类。没有像上找
成员方法:看右边,new的是哪一个对象就优先使用哪一个对象的方法。没有向上找
对象的向上转型
-
对象的向上转型,其实就是多态的写法
格式 父类名称 对象名 = new 子类名称();
含义:右侧创建一个子类对象,把他当作父类来看待使用
Animal animal = new Cat();创建了一只猫,当作动物看待
注意事项:向上转型一定是安全的从小范围(猫)转成大范围(动物)
对象的向下转型
对象的向下转型,其实是一个还原的动作
格式:子类名称 对象名 = (子类名称)父类对象;
含义,将父类对象,还原成本来的子类对象
Animal animal = new Cat();//本来是猫,向上转型成为动物
Cat cat = (cat) animal;//本来是猫,已经被当成动物了,还原回来成为本来的猫向下转型;
instanceof关键字进行类型判断
格式:
对象 instanceof类名称
这将会得到一个Boolean值结果,也就是判断前面的对象能不能当作后面类型的实例
笔记本USB接口案例
//先确定一下笔记本电脑有什么功能
//关机,开机,可以使用各种USB设备
//功能确定好之后写方法
public class Computer {
public void powerOn() {
System.out.println("笔记本电脑开机了");
}
public void powerOff() {
System.out.println("笔记本电脑关机了");
}
public void usbDevice(USB usb) {
usb.open();
if (usb instanceof Mouse) {
Mouse mouse = (Mouse) usb;
mouse.click();
} else if (usb instanceof KeyBoard) {
KeyBoard keyboard = (KeyBoard) usb;
keyboard.type();
}
//usb.close();
}
}
//usb设备需要设置成接口,并且有抽象方法,
//因为usb设备都有着共性的方法,和非共性的方法,我们需要把共性的方法给抽取出来
//usb设备都有开关的功能
public interface USB {
//打开设备的功能
public abstract void open();
//关闭设备的功能
public abstract void close();
}
//现在设置一个usb设备
//去实现USB接口
//实现了这个USB接口才可以在Computer类中传递进去,有了USB设备,鼠标才是一个完整的电脑
//现在就去实现这个接口吧
public class Mouse implements USB {
//必须重写抽象方法
@Override
public void open() {
System.out.println("鼠标插入");
}
@Override
public void close() {
System.out.println("鼠标拔出");
}
//鼠标特有的方法
public void click() {
System.out.println("鼠标点击");
}
}
//也是一个USB设备
public class KeyBoard implements USB {
//重写方法
@Override
public void open() {
System.out.println("键盘插入。。。");
}
@Override
public void close() {
System.out.println("键盘拔出");
}
//键盘特有方法
public void type() {
System.out.println("键盘打字");
}
}
//现在可以创建一个计算机了
public class ComputerImple {
public static void main(String[] args) {
//创建一个笔记本对象
Computer computer = new Computer();
//启动笔记本
computer.powerOn();
//创建USB接口
USB usb = new Mouse();
//传递接口
computer.usbDevice(usb);
USB usb1 = new KeyBoard();
computer.usbDevice(usb1);
//关闭笔记本
computer.powerOff();
}
}
7天学完Java基础之5/7的更多相关文章
-
7天学完Java基础之0/7
笔记-7天学完Java基础之0/7 1.常用命令提示符(cmd) 启动:Win+R,输入cmd
-
简明易懂,将细节隐藏,面向新手树立web开发概念——学完Java基础语法,超快速上手springboot+mybatiJavaWeb开发
简明易懂,将细节隐藏,面向新手树立web开发概念 --学完Java基础语法,超快速上手JavaWeb开发 Web本质(先忽视各种协议) Web应用可以理解为浏览器和服务器之间的交互. 我们可以看一个简 ...
-
7天学完Java基础之4/7
静态static 如果一个成员变量使用了static关键字,那么这个变量不再属于对象自己,而是属于所在的类,多个对象共享同一份数据 静态static 关键字修饰成员变量 public class St ...
-
7天学完Java基础之7/7
Object类的toString方法 类Object是类层次结构的根类 每个都使用Object作为超类 所有对象都实现这个类的方法 //这个是Object类的子类,实现了其所有方法 public cl ...
-
7天学完Java基础之6/7
final关键字的概念与四种用法 final关键字代表最终,不可改变的 常见四种用法: 可以用来修饰一个类 当前这个类不能有任何子类 可以用来修饰一个方法 当final关键字用来修饰一个方法的时候,这 ...
-
7天学完Java基础之3/7
API概述 什么叫做API? API(Application Programming lnterface),应用程序编程接口. 所谓API就是值好多的类,好多的方法,JDK给我们提供了很多现成的类,我 ...
-
7天学完Java基础之1/7
方法重载 package cn.itcat.day04.demo01; //方法重载就是参数个数不同,参数类型不同,参数类型的顺序不同 //方法重载与参数名称无关,与方法返回值类型无关 //方法重载方 ...
-
7天学完Java基础之2/7
面向对象 面向对象的思想就是值我们要实现一个共功能的时候,我们不自己去做,而是找别人帮我们去做,帮我们去做的这个人就是对象.面向对象强调的是谁来帮我实现这个功能. 类与对象的关系 类:是一组相关属性和 ...
-
学完 JAVA SE后学什么 。。。
我觉得学习j2ee一定要循序渐进,千万不要太急了.把java基础打牢一点,再牢一点.各位,你们在后面学习什么 struts,hibernate,spring,ajax..都很轻松. 第一个阶段(jav ...
随机推荐
-
Google疯了,竟然这样!
导读 一个小问题:你每天做什么事?当然了,好多事情,但是我可以指出一件事,你几乎每天都会用 Google 搜索,我说的对吗?现在,如果你是一位 Linux 用户,这里有另外一个问题:如果你甚至不用离开 ...
-
Windows下Qt5搭建Android开发环境笔记
Windows很大的特点是配置使用几乎都可以图形化进行,和Linux比起来在很多时候配置环境也要方便很多.所以,搭建Qt for Andorid也是十分简单的.需要以下工具: 1.最方便的Qt官方包, ...
-
[SQL SERVER 2005]数据库差异备份及还原
因为之前遇到还原差异备份,最开始遇到SQLServer报错:”无法还原日志备份或差异备份,因为没有文件可用于前滚“.查阅很多资料后,终于得到解决.收集整理成这篇随笔. 问题原因:出现这种错误绝大多数是 ...
-
Objective-C 之优雅的命名(转)
There are only two hard things in Computer Science: cache invalidation and naming things. 在计算机科学中只有两 ...
-
URI--http://zh.wikipedia.org/wiki/%E7%BB%9F%E4%B8%80%E8%B5%84%E6%BA%90%E6%A0%87%E5%BF%97%E7%AC%A6
*,*的百科全书 在电脑术语中,统一资源标识符(Uniform Resource Identifier,或URI)是一个用于标识某一互联网资源名称的字符串. 该种标识允许用户对网络中( ...
-
form表单提交引发的血案
最近,公司某条产品线上的一个功能出了问题:点击查询的时候,该页面在IE上直接卡死,chrome上会卡顿一段时间候提交表单进行查询.拿到这个bug单子以后,简单重现了下,基本上定位到是查询操作中的问题, ...
-
List,Set,Collection,Collections比较
官方话 1.List和Set都是接口,他们都继承于接口Collection,List是一个有序的可重复的集合,而Set的无序的不可重复的集合.Collection是集合的顶层接口,Collection ...
-
tomcat8.5 Host-Manager配置访问的方法
1. 安装配置tomcat服务器,浏览器输入 localhost:8080,可正常访问主页,但访问localhost:8080/host-manager, localhost:8080/manager ...
-
剑指offer 高速排序
高速排序一般的写法.教科书上非常具体,这里介绍作者的写法. 程序例如以下: #include<iostream> #include<stack> using namespace ...
-
ioctl命令
_IO._IOR._IOW._IOWR 宏的使用说明 驱动程序中 ioctl 函数传递的变量 cmd 是应用程序向驱动程序请求处理的命令.cmd 除了用于区别不同命令的数值,还可包含有助于处理的几种 ...