当前位置: 首页 > 编程日记 > 正文

Java学习总结:14

接口

接口的基本定义

接口严格来讲属于一个特殊的类,而且这个类里面只有抽象方法与全局变量。
在java里面可以使用interface关键字来实现接口的定义。
例:定义接口

interface A{	//定义接口public static final String MSG="Hello World";	//全局变量public abstract void print();	//抽象方法
}

接口的使用原则:
1.接口必须要有子类,但是此时一个子类可以用implements关键字实现多个接口,避免单继承局限;
2.接口的子类(如果不是抽象类),必须要覆写接口中的全部抽象方法;
3.接口的对象可以利用子类对象的向上转型进行实例化操作。
例:实现接口

interface A9{public static final String MSG="Hello World";public abstract void print();
}
interface B9{public abstract void get();
}
class X1 implements A9,B9{public void print(){System.out.println("A接口的抽象方法");}public void get(){System.out.println("B接口的抽象方法");}
}
public class Test1_1_4_3 {public static void main(String args[]){X1 x=new X1();A9 a=x;B9 b=x;a.print();b.get();System.out.println(A9.MSG);}
}
//结果
//A接口的抽象方法
//B接口的抽象方法
//Hello World

如果一个子类既要继承抽象类又要实现接口,那么应该采用先继承后实现接口的顺序完成。

例:子类继承抽象类并实现接口

interface A9{	//定义接口public abstract void print();	//抽象方法
}
interface B9{public abstract void get();
}
abstract class C9{public abstract void change();
}
class X1 extends C9 implements A9,B9{	//X1类继承了抽象类C9,实现了A9和B9两个接口public void print(){	//覆写A9中的方法System.out.println("A接口的抽象方法");}public void get(){System.out.println("B接口的抽象方法");}public void change(){	//覆写抽象类C9的方法System.out.println("C类的抽象方法");}
}
public class Test1_1_4_3 {public static void main(String args[]){X1 x=new X1();A9 a=x;B9 b=x;C9 c=x;a.print();b.get();c.change();}
}
//结果
//A接口的抽象方法
//B接口的抽象方法
//C类的抽象方法

例:接口的多继承

interface A{	//定义父接口public void funA();
}
interface B{	//定义父接口public void funB();
}
interface C extends A,B{	//利用extends,实现接口多继承public void funC();
}
class X implements C{	//实现C接口子类要覆写全部抽象方法public void funA(){}	//A接口定义的方法public void funB(){}	//B接口定义的方法public void funC(){}	//C接口定义的方法
}

虽然从接口本身的概念上来讲只能够由抽象方法和全局变量组成,但是所有的内部结构不受这些要求的限制,也就是说在接口里面可以定义普通内部类、抽象内部类、内部接口

例:在接口里定义抽象类

interface A{public void funA();abstract class B{	//定义接口中的抽象类public abstract void B();}
}
class X implements A{	//X实现了A接口public void funA(){System.out.println("Hello World");}class Y extends B{	//内部抽象类的子类,可以选择型继承public void funB(){}}
}

在一个接口内部如果使用static去定义一个内部接口,该接口就表示是一个外部接口。

例:

interface A{public void funA();static interface B{	//外部接口public void funB();}
}
class X implements A.B{	//X实现了A接口public void funB(){}
}

接口的实际应用——标准

例:定义USB标准

interface USB{	//定义标准一定就是接口public void start();	//USB设备开始工作public void stop();		//USB设备停止工作
}

例:定义计算机类

class Computer{public void plugin(USB usb){	//插入USB接口设备(子类对象)usb.start();	//开始工作usb.stop();		//停止工作}
}

例:定义U盘子类

class Flash implement USB{public void start(){System.out.println("U盘开始使用");}public void stop(){System.out.println("U盘停止使用");}
}
public class Test{public static void main(String args[]){Computer com=new Computer();	//实例化计算机类com.plugin(new Flash);		//插入USB接口设备}
}

接口的应用——工厂设计模式

interface Fruit{public void eat();
}
class Apple implements Fruit{public void eat(){System.out.println("吃苹果");}
}
class Orange implements Fruit{public void eat(){System.out.println("吃橘子");}
}
class Factory{	//定义工厂类,此类不提供属性public static Fruit getInstance(String className){if ("apple".equals(className)){return new Apple();}else if("orange".equals(className)){return new Orange();}else{return null;}}
}
public class Test1_1_4_4 {public static void main(String args[]){Fruit f=Factory.getInstance("orange");	//通过工厂类取得指定标记的对象f.eat();	//调用接口方法}
}

在这里插入图片描述
在这里插入图片描述
有了该工厂类,就可以不用每次都要去修改实例化接口的子类。

抽象类与接口的区别

在这里插入图片描述
注意:如果是自己写的接口,那么绝对不要使用关键字new直接实例化接口子类,应该使用工厂类完成。

相关文章:

Unity中创建本地多人游戏完整案例视频教程 Learn To Create A Local Multiplayer Game In Unity

Unity中创建本地多人游戏完整案例视频教程 Learn To Create A Local Multiplayer Game In Unity MP4 |视频:h264,1280x720 |音频:AAC,44.1 KHz,2 Ch 流派:电子学习|语言:英语原英文字幕 (机译中文字幕)|时长:15章 70…

第十二周 11.15-11.21

11.15 补个BC。 HDU 5565 Clarke and baton 没太懂题解怎么搞。反正挺暴力过了。 1 #include <iostream>2 #include <cstdio>3 #include <map>4 #include <vector>5 #include <algorithm>6 using namespace std;7 typedef long long LL;8 const …

Java 多线程的基本方式

Java 多线程的基本方式 基础实现两种方式&#xff1a; 通过实现Callable 接口方式&#xff08;可得到返回值)&#xff1a;

一次HP 阵列卡排障

公司使用的是HP gen8机器&#xff0c;用的是p420i阵列卡&#xff0c;同时在系统的另一端&#xff0c;nagios监控系统配合nrpe脚本check_hpasm定期检测硬件健康。最近为了让机器更带劲&#xff0c;加上了SSD硬盘&#xff0c;机械硬盘仅用作大容量存储&#xff0c;在感受速度与激…

集合、泛型、增强for

对于集合&#xff0c;首先要明确的是最顶层的接口是Collection接口类&#xff0c;其包含一些基本的方法以便子类调用&#xff0c;不过在定义的时候最好定义好数据类型&#xff0c;以免遍历时还得必须进行向上转型&#xff1b;特别注意的是其没有关于下标的方法。同时为了方便遍…

【强推】Blender制作逼真人物角色完整案例视频教程

【强推】Blender制作逼真人物角色完整案例视频教程 【强推】Blender制作逼真人物角色完整案例视频教程 时长53h 30m 1280X720 MP4 含教程工程文件 共九大模块 130小节课程 教程大小&#xff1a;12.9G 语言:英语机译中文字幕&#xff08;含原英文字幕文件&#xff09; Victory…

Java学习总结:15

Object类 Object类的基本定义 Object类是所有类的父类&#xff0c;也就是说任何一个类在定义时如果没有明确地继承一个父类&#xff0c;那它就是Object类的子类。 取得对象信息&#xff1a;toString() 在Object类中的toString()方法设计时&#xff0c;由于要考虑其可以满足…

ECMAScript——引用数据类型之array

array 转载于:https://www.cnblogs.com/cataway/p/4967058.html

2022-2028年中国炼钢行业市场研究及前瞻分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国炼钢行业市场行业相关概述、中国炼钢行业市场行业运行环境、分析了中国炼钢行业市场行业的…

mvc存储Cookie和读取Cookie方法

mvc存储Cookie和读取Cookie方法&#xff1a;//存储HttpCookie cookie new HttpCookie("User");System.Text.Encoding enc System.Text.Encoding.GetEncoding("gb2312");cookie["id"] HttpUtility.UrlEncode(logid.ToString(), enc);cookie[&q…

AJAX 简介

什么是 AJAX &#xff1f; AJAX 异步 JavaScript 和 XML。 AJAX 是一种用于创建快速动态网页的技术。 通过在后台与服务器进行少量数据交换&#xff0c;AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下&#xff0c;对网页的某部分进行更新。 传统的网…

c4d跟踪特效合成视频教程 Master Motion Tracking with Cinema 4D

c4d跟踪特效合成视频教程 Master Motion Tracking with Cinema 4D MP4 |视频&#xff1a;h264&#xff0c;1280720 |音频&#xff1a;aac&#xff0c;48000 Hz 语言&#xff1a;英语机译中文字幕 |尺寸&#xff1a;4.9 GB |持续时间&#xff1a;5小时2分钟 你将学到什么 百度…

[转]Getting Start With Node.JS Tools For Visual Studio

本文转自&#xff1a;http://www.c-sharpcorner.com/UploadFile/g_arora/getting-started-with-node-js-tools-for-visual-studio/ Table of contents 1. Introduction 2. What Node.JS is 3. How to install Node.JS 4. Lets Start by Creation of a Simple App Pre-requites…

Java学习总结:16

匿名内部类 匿名内部类指的是没有名字的内部类&#xff0c;其必须在抽象类或接口基础上才可以定义。 例&#xff1a;采用匿名内部类简化类的定义 interface Message{ //定义接口public void print(); } public class Test1_1_4_9 {public static void main(String args[]){fu…

Java 多线程概述

多线程技术概述 1.线程与进程 进程&#xff1a;内存中运行的应用程序&#xff0c;每个进程都拥有一个独立的内存空间。线程&#xff1a;是进程中的一个执行路径&#xff0c;共享一个内存空间&#xff0c;线程之间可以自由切换、并发执行&#xff0c;一个进程最少有一个线程&am…

nginx图片过滤处理模块http_image_filter_module安装配置笔记

http_image_filter_module是nginx提供的集成图片处理模块&#xff0c;支持nginx-0.7.54以后的版本&#xff0c;在网站访问量不是很高磁盘有限不想生成多余的图片文件的前提下可&#xff0c;就可以用它实时缩放图片&#xff0c;旋转图片&#xff0c;验证图片有效性以及获取图片宽…

Centos7 安装 telnet 服务

准备写一个 django-webtelnet&#xff08;运维管理系统集成后管理网络设备&#xff09;&#xff0c;但是手边没有现成的网络设备资源可以测试&#xff0c;那就研究下 Centos7 下安装 telnet-server 吧。 安装 yum -y install xinetd telnet telnet-server telnet-server 是以 x…

Zbrush制作手榴弹案例讲解学习教程

Sculpting In Zbrush- Project Grenade! MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz&#xff0c;2 Ch 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; |时长:44节课(11h 43m) |大小解压后:11 GB 含课程素材 云桥网络…

Winform控件缩写

控件名称 缩写 Buttom按钮 Btn CheckBox复选框 Chk ColumnHeader视图列表头 Col ComboBox组合框 Cbo ContextMenu快捷菜单 Ctm DataGrid数据网格控件 Dg DataGridView数据网格视图控件 Dgv DteTimePicker时间输入框 Dtp DomainUpDown数值框 Dud Form窗体 …

Java习题:1

假设类X是类Y的父类&#xff0c;下列声明对象x的语句中不正确的是( )。 A.X xnew X(); B.X xnew Y(); C.Y xnew Y(); D.Y xnew X(); 答案&#xff1a;D 向下转型操作本身是有前提条件的&#xff0c;必须发生向上转型后才可以发生向下转型。 各个选项的代码实现&#xff1a; …

2022-2028年中国廉价航空行业深度调研及投资前景预测报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国廉价航空行业市场行业相关概述、中国廉价航空行业市场行业运行环境、分析了中国廉价航空行…

【SSRS】入门篇(二) -- 建立数据源

原文:【SSRS】入门篇(二) -- 建立数据源通过 【SSRS】入门篇(一) -- 创建SSRS项目 这篇&#xff0c;我们建立了一个SSRS项目&#xff1b; 接下来&#xff0c;我们以 AdventureWorks2012 示例数据库&#xff0c;讲下如何建立数据源&#xff1b;(AdventureWorks2012 下载) 1、解决…

k8s相关的面试题

k8s相关的面试题 https://blog.csdn.net/huakai_sun/article/details/82378856 posted on 2019-07-30 20:33 竹径风声 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/girl1314/p/11272568.html

CG游戏道具全流程制作视频教程 Artstation – Stylized Game Asset

CG游戏道具全流程制作视频教程 Artstation – Stylized Game Asset 时长&#xff1a;9h 30m 含项目文件 1920X1080 MP4 语言&#xff1a;英语机译中文字幕 教程大小&#xff1a;4G 标题&#xff1a;Artstation–风格化游戏资产 云桥网络 获qu 教程 信息&#xff1a; 内容&a…

Java学习总结:17

包及访问控制权限 包的定义 在Java中使用package关键字来定义包&#xff0c;此语句必须写在xxx.java文件的首行。 例&#xff1a;定义包 package com.study.Demo; //定义程序所在包&#xff0c;此语句必须放在首行public class Hello {public static void main(String args[…

常用的网络配置命令 ifconfig 所在的包

通过rpm的数据库反查 ifconfig这个可执行文件的提供者&#xff0c;得出这个文件属于一个叫 net-tools 的包 转载于:https://www.cnblogs.com/vanwoos/p/4987375.html

Sentinel 高可用流量管理框架

Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。 Sentinel 具有以下特性: 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心…

'libxml/tree.h' file not found

本文转载至 http://www.cnblogs.com/hanjun/p/3711173.html 看看Header Search Paths 为 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/usr/include/libxml2 看看Base SDK 为 ios 6.1 于是把Header Search Paths 该…

Spring Cloud 微服务实战笔记

Spring Cloud 微服务实战笔记 微服务知识 传统开发所有业务逻辑都在一个应用中, 开发&#xff0c;测试&#xff0c;部署随着需求增加会不断为单个项目增加不同业务模块&#xff1b;前端展现也不局限于html视图模板的形式,后端向前端支持需要更多的接口模块。 随着需求增多&…

UE商城资源 Kitsune狐狸女孩

Unreal Engine虚幻游戏引擎素材资源 Unreal Engine Marketplace –Kitsune 4.26狐狸女孩 大小解压后&#xff1a;569M 可爱的Kitsune的3D模型。装配到史诗骷髅。完全模块化&#xff0c;包括无衣服的身体。包含不同的发型。通过材质实例轻松改变颜色。包含与Live Link Face应用程…