Java学习-接口

Java学习-接口


版权声明:本文为博主原创文章,转载请注明出处。
https://mp.csdn.net/mdeditor/84779687

1、为什么使用接口?
Java语言不支持多重继承,即一个子类只能有一个父类,若子类需要继承多个父类,这时需要使用接口。
2、接口的定义:
定义分为接口声明和接口体。接口体包含常量定义和方法定义两部分,方法体中只进行方法的声明,不提供方法的实现,因此方法的定义没有方法体,且用分号结尾。形式如下:
[修饰符].interface 接口名 [extends 父接口名列表]{
[public] [static][final] 常量名;
[public] [abstract] 方法;
}

  • 修饰符:可选参数,若为public,则表示任意类均可以使用这个接口;省略的话,则使用默认(即只有与该接口定义在同一个包中的类才可以访问这个接口)。
  • 接口名:必选参数,首字母大写。
  • extends 父接口名列表:可选参数,用于指定要定义的接口继承于哪个父接口。当有多个父类接口时,用逗号分隔。
【例】
package p1;
public interface CalInterface {
	//定义用于表示圆周率的常量
    final float PI=3.14159f;
    //定义一个用于计算面积的方法getArea()
    float getArea(float r);
    //定义一个用于计算周长的方法getCircumference()
    float getCircumference(float r);
}
说明:(1)接口继承时将继承父接口中的常量和抽象方法。
(2)成员变量的声明形式:
     [public] [static][final] 成员变量名=常量;即接口中的成员变量都是public权限的static常量。
(3)成员方法的声明:
      [public] [abstract] 返回值类型 成员方法名(参数表);
(4)java类文件名与类名相同,接口文件名与接口名也相同。

3、接口的实现:
(1)[修饰符] class <类名> [extends 父类名] [implements 接口列表]{}

说明:

  • 修饰符:可选参数,可选值为public、abstract、final;
  • 类名首字母大写;
  • 在类中实现接口时,方法的名字、返回值类型、参数的个数及类型必须与接口中的定义完全相同,且必须实现接口中的所有方法。

(2)接口特点:

  • 类只能单继承,接口可以多继承;
  • 接口可以没有父接口(最高层),类的最高层是Object类。
  • 接口中的方法只能被声明为public或abstract,不声明,则默认为public abstract; 接口中的成员变量只能使用public、static、final声明,否则使用默认:public static final。
  • 在接口中只定义方法名、返回值、参数表,而不定义方法体。
【例】
package p1;
public class Cire implements CalInterface {
	public float getArea(float r)
	{
		//计算圆面积并赋值给变量area
		float area=PI*r*r;
		//返回圆面积
		return area;	
	}
	public float getCircumference(float r) {
		//计算圆的周长并赋值给变量circumference
		float circumference=2*PI*r;
		//返回圆周长
		return circumference;
	}
	public static void main(String[] args) {
		Cire cire=new Cire();
		float f=cire.getArea(2.0f);
		System.out.println(Float.toString(f));
	}	
}
----------------------
运行结果:12.56636

4、接口使用例子:

package ch9;
    //定义接口
	interface Fight
	{
		void fight();
	}
	//小胖和小瘦实现这个接口
	class Xiaopang implements Fight
	{
		//定义方法体
		public void fight() 
		{
			System.out.println("小胖学习很努力");
		}
	}
	class Xiaoshou implements Fight
	{
		//定义方法体
		public void fight()
		 {
			System.out.println("小瘦总是很努力的学习");
		}
	}
public class InterfaceTest 
{
	public static void main(String args[])
	 {
		//实例化对象
		Fight aFight=new Xiaopang();
		Fight bFight=new Xiaoshou();
		aFight.fight();
		bFight.fight();
	}		
}   
----------------------
运行结果:12.56636

5、扩展接口与接口的多继承:
接口的方法是抽象的。
(1)方法重名:若重名的两个方法有不同的参数个数或者类型,则接口继承这两个方法,即方法被重载;若两个方法方法返回值不同,会产生无法实现的错误。

package ch9;
//新建一个类,命名为Father.java
public class Father {

	private String houseName="FatherHouse";
	public String getHouseName()
	{
		return houseName;
	}
}
------------------------
package ch9;
//新建一个接口,命名为Family.java
public interface Family {

	public String getHouseName();
}
------------------------------
package ch9;
//新建一个类,命名为Son.java,继承Father类,实现Family接口
public class Son extends Father implements Family
{
	public String getHouseName(String s)
	{
		//重写接口中的方法
		class MyHouse implements Family
		{
			private String houseName;
			private MyHouse(String house)
			{
				houseName=house;
			}
			public String getHouseName(){
				return houseName;
			}
		}
		//返回类中的方法的值
		return new MyHouse(s).getHouseName();
	}
	public static void main(String[] args) {
		Son son=new Son();
		//得到家的房子
		System.out.println(son.getHouseName("FamilyHouse"));
		//得到父亲的房子
		System.out.println(son.getHouseName());
	}
}
-------------------------------
输出结果:
FamilyHouse
FatherHouse

(2)常量重名:重名的变量都保留,使用原来的接口名字作为前缀。

package ch9;
//定义接口1
interface Inter1
{
	public static final int A=0;		
}
//定义接口2
interface Inter2
{
	public static final int A=1;
	public static final int B=2;
}
//定义类实现接口1和接口2
class Demo implements Inter1,Inter2
{
		
}
public class Chongming
{
	public static void main(String[] args)
	{
	System.out.println(Demo.B);
	System.out.println(Inter1.A);
	System.out.println(Inter2.A);
	System.out.println(Demo.B);
    }
}
-----------------------------
输出结果为:
2
0
1
2

思维导图形式:
在这里插入图片描述

参考自:
            《Java编程基础及应用》 强彦 赵涓涓

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值