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{              //定义一个接口Shape
	double PI=3.14;           //声明常量PI
	double Mianji();          //声明一个Mianji方法
}

接口的实现

接口中只包含抽象方法,因此不能像一般类一样使用new运算符产生对象,使用关键字implements连接接口,语法格式为:

class 类名 implements 接口名{
      //类主体
}

例如:

interface Shape{                   //定义一个Shape接口
	double PI=3.14;                //声明一个double类型常量PI
	double Mianji();               //声明一个double类型方法Mianji
}
class Yuan implements Shape{       //声明一个名为Yuan的类并用implements连接接口Shape
	double r=10;                   //声明一个double类型常量r
	public double Mianji() {       //声明一个double类型的公共方法Mianji
		return 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{                   //声明一个接口A
	float PI=3.14f;            //定义一个用于表示圆周率的常量PI
	float getArea();           //定义一个用于计算面积的方法getArea
	float getGirth();          //定义一个用于计算周长的方法getGirth
}
interface B{                   //声明一个接口B
	float PI=3.14158f;         //定义一个用于表示圆周率的常量PI
	float getArea();           //定义一个用于计算面积的方法getArea
}
class C implements A,B{        //声明一个C类并连接接口A,B
	private float radius;      //定义一个私有变量radius表示圆的半径
	public void Circle(float r) {      //声明一个Circle方法,将圆半径初始化为参数r的值
		radius=r;
	}
	public float getArea() {           //声明一个实现计算圆面积的方法getArea
		float area=A.PI*radius*radius; //调用A接口中的PI常量
		return area;
	}
	public float getGirth() {          //声明一个计算圆周率的方法getGirth
		float circuGirth=2*B.PI*radius;  //调用B接口中的PI常量
		return circuGirth;
	}
}
public class myfirst {
	public static void main(String[] args) {
		C c=new C();                   //创建C类的实例对象c
		c.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实例对象d
		System.out.println(d);  //打印当前时间
	}
}

运行结果为:

Thu Mar 04 16:37:33 CST 2021

最后

好了,关于Java接口和包的知识讲到这里了,谢谢观看!!!

我们下篇文章再见!!!

成功不是将来才有的,而是从决定去做的那一刻起,持续累积而成。

  • 16
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白巧克力LIN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值