Java系列(16)——接口

本系列博客汇总在这里:Java系列_汇总


一、什么是接口

  1. 当一个抽象类中的所有方法都是抽象的,那么我们就可以把它定义为一个接口,接口是对行为的抽象;抽象类是对属性和行为的抽象。

  2. 接口定义的只是一种规范,是一种行为的抽象,就是说我给你定义好方法名,返回值类型,参数类型及个数。我不管怎么实现,到类里边才具体实现。

  3. 语法

    interface 接口名
    {
    	方法的定义;
    }
    
  4. 示例

    interface TeacherService
    {	
    	//在接口中每一个方法的定义都是抽象的,可以省略abstract
    	public void teaching();//抽象方法
    	public void eating();//抽象方法
    	
    	//在接口中定义的都是常量
    	//int AGE = 8;应该写为如下:
    	public final static int AGE = 8;
    	
    	//接口同抽象类相似,接口中的方法不能和private,static,final共存
    	//private void eating();错误
    	//public final void eating();错误
    	//public static void eating();错误
    }
    
    class JavaTeacher implements TeacherService
    {
    	public void teaching()
    	{		
    		System.out.println("张三在上课");
    	}
    	
    	public void eating()
    	{		
    		System.out.println("李四在吃东西");
    	}
    }
    
    class Welcome
    {	
    	public static void main(String[] args)
    	{		
    		JavaTeacher jt = new JavaTeacher();
    		jt.teaching();
    		jt.eating();
    		
    		System.out.println("--------------------通过实例来访问-----------------------------");
    		System.out.println(jt.AGE);
    		System.out.println("--------------------通过接口名来访问-----------------------------");
    		System.out.println(TeacherService.AGE);
    	}
    }
    

    在这里插入图片描述

  5. 接口中可以定义属性(常量),可以通过接口来实现类的实例来访问,还可以通过接口名来访问(推荐使用), 接口中的属性不能修改,我们接口中的属性默认都是使用final static修饰的 。通常在接口中来定义属性把它作为常量,常量的名字规范是单词大写。而且多个单词之间用下划线俩分隔。比如:PI。

  6. 接口可以继承接口(单继承和多继承,多级继承)。

二、接口的继承和实现

  • 示例
    //定义接口A
    interface A
    {
    	public void method();
    }
    
    //定义接口B
    interface B
    {
    	public void method1();
    }
    
    //定义接口C继承于A
    interface C extends A
    {
    	public void method2();
    }
    
    //定义接口D继承于C
    interface D extends C
    {
    
    }
    
    //定义类Test实现接口DB
    class Test implements D,B
    {
    	//由于C继承A,D又继承C,所以在实现接口D的时候,就需要实现接口ADC里面的所有抽象方法;B单独处理
    	public void method()
    	{		
    	}
    	
    	public void method1()
    	{	
    	}
    		
    	public void method2()
    	{		
    	}
    }
    //主类
    class Welcome
    {	
    	public static void main(String[] args)
    	{		
    	}
    }
    

三、接口的应用

  • 范例:使用接口方式计算圆和正方形的面积和周长,见程序需要透彻理解!
    //定义接口CalInter
    interface CalInter
    {
    	/*
    	 *定义计算面积的方法
    	 */
    	public double getArea(double r);
    		/*
    	 *定义计算周长的方法
    	 */
    	public double getLength(double r);
    	/*
    	 *定义圆周率常量
    	 */	
    	public final static double PI = 3.14;
    }
    
    //使用类Circle实现接口CalInter
    class Circle implements CalInter
    {
    	/**
    	 *定义圆的属性半径
    	 */
    	private double r;
    	
    	/**
    	 *定义圆有参数的构造器
    	 */
    	public Circle(double r)
    	{		
    		this.r = r;		
    	}
    		
    	/**
    	 *提供一个对外访问r的方法 
    	 */	 
    	public double getR()
    	{		
    		return r;
    	}
    	
    	/**
    	 * 实现接口的所有方法
    	 */
    	public double getArea(double r)
    	{			
    		return r*r*CalInter.PI;
    	}
    	
    	public double getLength(double r)
    	{		
    		return 2*r*CalInter.PI;
    	}		
    }
    
    //主类
    class Welcome
    {	
    	public static void main(String[] args)
    	{		
    		Circle c = new Circle(2);
    		//获得半径
    		double r = c.getR();
    		//计算面积
    		double area = c.getArea(r);
    		double length = c.getLength(r);
    		System.out.println("半径是"+r+"的圆的面积是"+area);
    		System.out.println("半径是"+r+"的圆的周长是"+length);
    	}
    }
    
    在这里插入图片描述

四、接口的好处

  1. 接口定义的是一种标准,可以使我们的代码分层开发,分模块开发。
  2. 降低代码的耦合度,提高代码的可扩展性和可维护性。
  3. 接口改进的单继承的局限性。

五、接口和抽象类的区别

  1. 接口的所有方法都是抽象的,抽象类里面的方法可以是抽象的也可以是不抽象的。
  2. 接口和抽象类都不能实例化,接口需要类来实现后实例化实现类,抽象类需要类来继承后实例化子类。
  3. 抽象类只能单继承,接口可以多继承接口(jdk1.7),接口还可以多实现。
  4. 接口中的属性是 static final 类型的,抽象类中的属性跟普通类中的属性没有区别。
  5. 接口中的方法默认就是抽象的不需要加 abstract,抽象类中的抽象方法需要加 abstract 关键字。

如有错误,欢迎指正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值