Java接口和包(超详细)
目录
前言
接口
声明接口
接口的实现
接口的继承
实现多个接口时的常量和方法冲突问题
包
包的创建
导入包
Java的系统包
常用工具包
java.lang包
java.util包
最后
前言
什么是接口呢,为什么要使用接口呢,我们知道在Java中只允许单继承,为了实现多继承,Java就引入了接口这个概念,什么是包呢,平常我们打开计算机的时候,要寻找一个文件,寻找那个文件所在的文件夹在哪里,其实包就是计算机文件夹的概念,在Java当中,我们编写的类,使用的接口,一些运作机制,就是存放在包里。好,下面我们开始学习接口和包的知识。
接口
接口在语法上与类相似,是一些常量和抽象方法的集合。需要注意的是:接口中的成员变量都是常量,成员方法都是没有方法体的抽象方法。注意:
- 接口中只能有常量、方法名;
- 接口中定义的方法不需要大括号,不需要写方法体,而是以分号结束;
- 接口没有构造方法,不能被实例化,只能被类实现或被另外的接口继承;
- 接口的方法只能是抽象的和公开的,不能有构造方法,Java接口可以有public、静态的和final属性。
接口与类相似点:
- 一个接口可以有多个方法。
- 接口文件保存在 .java 结尾的文件中,文件名使用接口名。
- 接口的字节码文件保存在 .class 结尾的文件中。
- 接口相应的字节码文件必须在与包名称相匹配的目录结构中。
接口与类的区别:
- 接口不能用于实例化对象,没有构造方法。
- 接口中所有的方法必须是抽象方法。
- 接口不能包含成员变量,除了 static 和 final 变量。
- 接口不是被类继承了,而是要被类实现。
- 接口支持多继承。
声明接口
使用interface关键字声明接口,声明接口时,关键字interface前面要么是修饰符public,要么什么都没有,而不能使用protected或者private关键字;接口可以是多继承的,即一个接口可以用任意多个父接口。
[修饰符] interface 接口名 [extends 父接口名列表]{//接口体,包括常量声明和方法声明//常量声明[public] [static] [final] 数据类型 常量名=常量值;//方法声明//[public] [abstract] 返回类型 方法名(参数列表);
}
各选项说明:
- 常量声明:接口中可以包含常量声明,也可以不包含,常量默认是public、static、final类型;
- 方法声明:接口中的方法只有返回值类型和方法名,没有方法体,接口的方法中都具有public和abstract属性,所以在声明方法时,可以省略前面的修饰符public和abstract。
例如:
interface Shape{ //定义一个接口Shapedouble PI=3.14; //声明常量PIdouble Mianji(); //声明一个Mianji方法
}
接口的实现
接口中只包含抽象方法,因此不能像一般类一样使用new运算符产生对象,使用关键字implements连接接口,语法格式为:
class 类名 implements 接口名{//类主体
}
例如:
interface Shape{ //定义一个Shape接口double PI=3.14; //声明一个double类型常量PIdouble Mianji(); //声明一个double类型方法Mianji
}
class Yuan implements Shape{ //声明一个名为Yuan的类并用implements连接接口Shapedouble r=10; //声明一个double类型常量rpublic double Mianji() { //声明一个double类型的公共方法Mianjireturn PI*r*r; //返回PI*r*r的乘积}
}
public class myfirst {public static void main(String[] args) {Yuan y=new Yuan(); //创建Yuan类的实例对象y System.out.println(y.Mianji()); //打印}
}
运行结果为:314.0
接口的继承
接口也是可以被继承的,用关键字extends,和类的继承相似,语法格式如下:
Interface Interface2 extends Interface1
注意:当类实现了一个接口,而该接口继承了另一个接口时,则这个类必须实现这两个接口的所有方法。
实现多个接口时的常量和方法冲突问题
当实现接口时,则可以实现多个接口,这时就有可能出现常量或方法名冲突的情况,那该怎样解决呢,在解决这类冲突问题时,如果是常量冲突,则需要在类中使用全限定名(接口名、常量名)明确指定常量所属的接口;如果是方法冲突,则只需要实现一个方法即可。例如:
interface A{ //声明一个接口Afloat PI=3.14f; //定义一个用于表示圆周率的常量PIfloat getArea(); //定义一个用于计算面积的方法getAreafloat getGirth(); //定义一个用于计算周长的方法getGirth
}
interface B{ //声明一个接口Bfloat PI=3.14158f; //定义一个用于表示圆周率的常量PIfloat getArea(); //定义一个用于计算面积的方法getArea
}
class C implements A,B{ //声明一个C类并连接接口A,Bprivate float radius; //定义一个私有变量radius表示圆的半径public void Circle(float r) { //声明一个Circle方法,将圆半径初始化为参数r的值radius=r;}public float getArea() { //声明一个实现计算圆面积的方法getAreafloat area=A.PI*radius*radius; //调用A接口中的PI常量return area;}public float getGirth() { //声明一个计算圆周率的方法getGirthfloat circuGirth=2*B.PI*radius; //调用B接口中的PI常量return circuGirth;}
}
public class myfirst {public static void main(String[] args) {C c=new C(); //创建C类的实例对象cc.Circle(3); //调用实例对象c的Circle并赋值float area=c.getArea(); //调用c对象的getArea方法,获得该对象的面积值System.out.println("圆的面积为:"+area);float girth=c.getGirth(); //调用c对象的getGirth方法,获得该对象的周长System.out.println("圆的周长为:"+girth);}
}
运行结果为:
圆的面积为:28.26
圆的周长为:18.84948
包
包的概念:
- 包是一种将相关类、接口或者其他包组织起来的集合体;
- 有助于避免命名冲突,同一个包中的类名不能重复,不同包中可以有相同的类名。
包的创建
创建自定义包,语法格式为:
package 包名;
注意:
- 创建了包之后,该文件中定义的任何类将属于指定的包;
- 创建包的语句必须为整个源程序的第一行。
package myPack1; //在当前文件夹下创建包(子文件夹myPack1)
package myPack2.sun; //在当前文件夹下创建包(子文件夹myPack2),再在其下创建子文件夹sun
在eclipse中创建包:在项目上点击右键,单击new下的Package。如果你不创建包,系统会默认生成一个default包。
导入包
要使用包中的成员,必须导入包,语法格式为:
import 包名.类名 //导入包中的一个特定类/接口
import 包名.* //导入包中所有类和接口
Java的系统包
系统包相当于函数库,包中提供了许多方法供用户使用
java.lang:包含所有的基本语言类,如基本数据类型、数学函数、字符串等,默认引入;
java.util:包含有用的实用功能类型,如日期类;
java.io:包含所有的输入输出类;
java.net:包含所有实现网络功能的类;
java.awt:包含图形用户界面设计类;
javax.swing:是java.awt包的扩充,包含更丰富的抽象窗口工具集;
java.applet:包含所有支持小应用程序Java applet的类;
java.awt.image:包含图像处理类。
常用工具包
java.lang包
Math类:
- Math.pow(double a,double b):返回以a为底,b为指数的幂值;
- Math.sqrt(double a):返回a的算术平方根;
- Math.round():采用四舍五入方式取得最接近的整数;
- Math.random():返回0到1之间的随机小数,要创建一个从x到y的随机数,例如:Math.round(Math.random()*(y-x))+x;
java.util包
Date类:Date类实际上只是一个包裹类,它包含的是一个长整型数据,表示的是从GMT(格林尼治标准时间)1970年1月1日00:00:00这一刻之后经历的毫秒数。
import java.util.*; //引入java.util包
public class myfirst {public static void main(String[] args) {Date d=new Date(); //创建Date实例对象dSystem.out.println(d); //打印当前时间}
}
运行结果为:
Thu Mar 04 16:37:33 CST 2021
最后
好了,关于Java接口和包的知识讲到这里了,谢谢观看!!!
我们下篇文章再见!!!
成功不是将来才有的,而是从决定去做的那一刻起,持续累积而成。
Java接口和包(超详细)相关推荐
- Java并发编程Future超详细教程
非原创,自己保存学习用,传播请参考原文. 原文链接:Java并发编程Future超详细教程 前言 创建线程有几种方式?这个问题的答案应该是可以脱口而出的吧 继承 Thread 类实现 Runnable ...
- Java 泛型详解(超详细的java泛型方法解析)
Java 泛型详解(超详细的java泛型方法解析) 1. 什么是泛型 泛型:是一种把明确类型的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型.也就是说在泛型使用过程中,操作的数据类型被指定为 ...
- 深入理解Java虚拟机(第3版)学习笔记——JAVA内存区域(超详细)
深入理解Java虚拟机(第3版)学习笔记--JAVA内存区域(超详细) 运行时数据区域 程序计数器 java虚拟机栈 本地方法栈 java堆 方法区 运行时常量池 直接内存 对象的创建 对象的内存布局 ...
- 2019年Java大厂面试(吐血超详细总结)
本文来自于慕课网手记: Java大厂面试(吐血超详细总结) 作者:小码哥的freestyle 链接: https://www.imooc.com/article/286545 来源:慕课网 面试清单 ...
- Java SE加强篇——超详细,Java入门,这一篇就够了
建议先阅读 JavaSE基础篇 第一天:面向对象进阶一 一.static静态 关键字 1.static是什么? static是静态的意思,可以修饰成员变量和成员方法 static修饰成员变量表示该成员 ...
- Java实现邮件发送 超详细!!!(以QQ邮箱个人版和企业版为例)
Java实现发送邮件 超详细!!!(以QQ邮箱个人版和企业版为例) 文章目录 Java实现发送邮件 超详细!!!(以QQ邮箱个人版和企业版为例) 个人邮箱示例 配置依赖 简单了解涉及的两个传输协议 Q ...
- java基础知识总结 超详细
1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具和jre. 2,JRE:Java Runtime Environment,java程序的运行环境,ja ...
- 爆肝3万5千字的Java学习笔记(超详细的java)
Java学习 java入门 java三大版本 javaSE:标准版(桌面程序,控制台开发-) javaME:嵌入式开发(手机,小家电-) javaEE:E企业级开发(web端,服务器开发-) Java ...
- 多种java 日志框架【超详细图文】
一.目标 日志的作用和目的 日志的框架 JUL的使用 LOG4J的使用 JCL的使用 二.日志的概念 2.1 日志文件 日志文件是用于记录系统操作事件的文件集合,可分为事件日志和消息日志.具有处理历史 ...
最新文章
- python 计算当月天数_告诉你怎么用Python进行企业营运分析!盈利这么多?
- 关于未达账项的账务处理
- 痞子衡嵌入式:飞思卡尔i.MX RTyyyy系列MCU启动那些事(8)- 从Raw NAND启动
- Linux 命令(三)--用户管理
- java random用法_JAVA面试题(1)
- 想快速拥有个人网站?来试试这个...
- centos7登陆mysql_Centos7安装Myql8.0并授权登录
- java缓存内存泄漏_java – getMethod是缓存并导致内存泄漏
- 模糊控制算法在MATLAB/SIMULINK中的应用
- 闲谈:渗透测试-红队版
- # Idea,2.5,软件安装,提示If you already have a 64-bit JDK installed ,defined a JAVA_HOME variable in Compu
- 【离散数学】单射、满射和双射的定义、区别
- 怎么样用阿里云RDS数据库
- 导出多个sheet的Excel以及在服务器上压缩文件然后再导出(在这里是压缩一个excel后导出)
- 组件化、模块化、Composing Builds
- c语言里输入12MmAA后回车,Word怎么用语言输入
- NLP标注工具Brat的简单使用
- 学习笔记-应用光学-7-6 摄影光学系统
- hive 正则表达式-regexp
- Java时间处理(UTC时间和本地时间转换)