Java中接口

导读:本篇文章讲解 Java中接口,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一、接口概念

 通过interface关键字修饰的Java元素就是接口
格式:public  interface  接口名{ }
           interface  接口名{ }

二、为什么要使用接口?

为了克服java的单继承,接口可以被实现多个
例如:收费,出租车有收费功能【1元/公里】,飞机有收费功能【全程100元】
出租车与飞机不是同一类事务,但是有相同的功能
  接口实际就是提供不同类型事务的公共内容,由接口根据自身的实际情况,类实现这个接口提供的公共内容。这样子类就不需要创建这个公共内容,只需要继承父类来重新写一下。

三、接口中的元素

 接口可以有常量、静态方法、抽象方法
1.接口汇总变量一定是public  static  final修饰的变量
2.接口中的静态方法一定是public修饰的,public可以被省略
3.接口中的抽象方法一定是public abstract修饰的,public  abstract可以省略
例如:

package com.wangxing.interfacetest1;
/**
 * 创建爱你一个接口
 * @author 联想
 */
public interface interfaceClass {
	//不能使普通实例变量/静态变量/局部边浪
	//public int int=1001;
	//public static int1=1001;
	//接口中的变量必须有 public stati final声明
	//可以省略public static但是还是静态变量
	 final int int1=1001;
	 
	 //接口中方法一定是静态方法一定是public修饰,可以省略public
	 //public interfaceClass(){}
	 //public void method1(){}
	 public static void method(){
		 System.out.println("这是接口方法");
	 }
	 
	 //接口中的抽象方法一定是public abstract修饰的,public abstract可以省略
	 public abstract void interfaceMethod();
	 void interfaceMethod2();
}

 四、接口的用法

1.接口不能new,如果需要访问抽象方法需要借助接口子类
例如:

package com.wangxing.interfacetest2;
public interface interfaceClassTow {
	//创建接口变量,可以使用接口名访问
	public static final String name="zhangsan";
    //创建抽象方法
	public abstract void interfaceMethod2();
}
package com.wangxing.interfacetest2;
public class interfaceTowSun implements interfaceClassTow{

	@Override
	public void interfaceMethod2() {
     
	    System.out.println("这是继承interfaceClassTow接口抽象方法重写后的");	
	}
}
package com.wangxing.interfacetest2;
public class main {
	public static void main(String args[]){
		
		//创建interfaceTowSun对象
		interfaceTowSun its=new interfaceTowSun();
		//调用interfaceTow中的interfaceMethod2方法
		its.interfaceMethod2();	
	}
}

Java中接口
2.类可以通过implements关键字去实现一个/多个接口
3.普通类去实现一个/多个接口,就需要将每一个接口抽象方法重写,否则就需要将这个普通的类改成抽象类。
例如:

​package com.wangxing.interfacetest2;
public class Class implements interfaceClassTow,interfaceClass{
	
	//继承接口interfaceClass的抽象方法重写
	@Override
	public void interfaceMethod() {
		System.out.println("interfaceClass的抽象方法重写后的");
	}
	//继承接口interfaceClassTow的抽象方法重写
	@Override
	public void interfaceMethod2() {
		System.out.println("interfaceClassTow的抽象方法重写后的");
	}
}

​

4.抽象类去实现一个/多个接口,不需要重写接口中的抽象方法。
例如:抽象类的子类继承这个方法时需要重写 

package com.wangxing.interfacetest2;
/**
 *创建抽象类
 * @author 联想
 */
public abstract class abstractClass implements interfaceClassTow{
	//抽象类继承接口时不需要重写抽象方法
	//抽象类的子类要重写父类继承接口的抽象方法
}
package com.wangxing.interfacetest2;
public class abstractSun extends abstractClass {
	//这是抽象类从接口2的抽象方法上继承的需要重写
	@Override
	public void interfaceMethod2() {
		// TODO Auto-generated method stub
	}
}

5.接口可以继承接口,并且可以继承父接口中的所有元素.
例如:

package com.wangxing.interfacetest2;

public interface abstarctInterfaceTow extends interfaceClassTow {

}
package com.wangxing.interfacetest2;
public interface interfaceClassTow {
	//创建接口变量,可以使用接口名访问
	public static final String name="zhangsan";
	//创建接口方法
	//接口中的静态方法可以使用接口名访问
	public static void method(){
		System.out.println("这是接口的方法");
	}
	public abstract void interfaceMethod2();
}

测试:

package com.wangxing.interfacetest2;
public class main {
	public static void main(String args[]){
		//测试接口继承接口
		System.out.println("从接口2上继承的元素"+abstarctInterfaceTow.name);
	}
}

Java中接口
6.利用接口对象创建出接口对象

 接口2

package com.wangxing.interfacetest2;
public interface interfaceClassTow {
	//创建接口变量,可以使用接口名访问
	public static final String name="zhangsan";
	//创建接口方法
	//接口中的静态方法可以使用接口名访问
	public void method(){
		System.out.println("这是接口的方法");
	}
	public abstract void interfaceMethod2();
}

接口子类

package com.wangxing.interfacetest2;
public class interfaceTowSun implements interfaceClassTow{

	@Override
	public void interfaceMethod2() {
	    System.out.println("这是继承interfaceClassTow接口抽象方法重写后的");	
	}
    
    public void method() {
	    System.out.println("这是继承interfaceClassTow接口method方法重写后的");	
	}
}
package com.wangxing.interfacetest2;

public class main {
	public static void main(String args[]){
		//用接口名访问接口2中的method
		//interfaceClassTow.method();
		//创建interfaceSun对象
		interfaceSun its=new interfaceSun();
		//调用interfaceSun中重写的method方法
		//此时结果是接口2的子类重写后的method方法
		its.method();
		
	//如果想要访问接口2父类中的method方法可以使用接口接口回调对象创建接口对象,得到接口2的对象
		//1.接口回调对象只能访问接口的抽象方法,实际上访问子类重写以后的抽象方法
		interfaceClassTow ift =new interfaceSun();
		//ift.method();
		System.out.println("使用创建的接口对象访问接口2中的元素"+ift.name);
		//2.接口回调对象不能访问子类本身的方法,如果要访问就需要强制类型转换
		//由接口2对象强制转换回接口的子类对象
		interfaceSun ifct=(interfaceSun)ift;
	}
}

Java中接口
7.当某一个普通的java类中的方法参数是接口类型的时候,可以传递接口回调对象,也可以是接口的子类对象。
例如:

package com.wangxing.interfacetest2;
public class puTongClass {
	public void method(interfaceClassTow inter){
		System.out.println("这是参数为接口类型的实例方法");
	}
}
package com.wangxing.interfacetest2;

public class main {
	public static void main(String args[]){
		//创建interfaceSun对象
		interfaceSun its=new interfaceSun();
	
	//如果想要访问接口2父类中的method方法可以使用接口接口回调对象创建接口对象,得到接口2的对象
		//1.接口回调对象只能访问接口的抽象方法,实际上访问子类重写以后的抽象方法
		interfaceClassTow ift =new interfaceSun();
		//ift.method();
		System.out.println("使用创建的接口对象访问接口2中的元素"+ift.name);
		//2.接口回调对象不能访问子类本身的方法,如果要访问就需要强制类型转换
		//由接口2对象强制转换回接口的子类对象
		interfaceSun ifct=(interfaceSun)ift;

		//创建普通类的对象
		puTongClass ptc=new puTongClass();
		//使用了接口2的回调对象
		ptc.method(ifct);
		//使用了接口2的子类对象
		ptc.method(its);
	}
}

五、 接口回调对象

接口回调对象与上转型对象很相似
接口回调对象–接口的子类对象赋值给接口变量
1.接口回调对象只能访问接口的抽象方法,实际上访问子类重写以后的抽象方法
2.接口回调对象不能访问子类本身的方法,如果要访问就需要强制类型转换

例如:

package com.wangxing.interfacetest2;

public interface interfaceClassTow {
	//创建接口变量,可以使用接口名访问
	public static final String name="zhangsan";
	//创建接口方法
	//接口中的静态方法可以使用接口名访问
	public static void method(){
		System.out.println("这是接口的方法");
	}
	public abstract void interfaceMethod2();
}

子类

package com.wangxing.interfacetest2;

public class interfaceSun implements interfaceClassTow{

	@Override
	public void interfaceMethod2() {
		System.out.println("这是继承interfaceClassTow接口抽象方法重写后的");	
	}
	public static void method(){
		System.out.println("这是的interfaceTowSun重写父类接口的方法");
	} 

}

测试:

package com.wangxing.interfacetest2;
public class main {
	public static void main(String args[]){
		
		//如果想要访问接口2父类中的method方法可以使用接口接口回调对象创建接口对象,得到接口2的对象
		//1.接口回调对象只能访问接口的抽象方法,实际上访问子类重写以后的抽象方法
		interfaceClassTow ift =new interfaceSun();
		//接口回调对象不能访问除了抽象方法以外的方法
		//想要访问抽象方法中的其他方法使用接口名直接访问
		interfaceClassTow.method();
		//ift.method();
		System.out.println("使用创建的接口对象访问接口2中的元素"+ift.name);
		//2.接口回调对象不能访问子类本身的方法,如果要访问就需要强制类型转换
		//由接口2对象强制转换回接口的子类对象
		interfaceSun ifct=(interfaceSun)ift;
		ifct.method();
	}
}

Java中接口

 六、卖水果和文具实例 

创建价格功能接口和怎么吃的接口

package com.wangxing.interfacetest3;

public interface fruitPrice {
	//创建一个抽象方法给接口
	public  abstract void priceMethod();
}
package com.wangxing.interfacetest3;

public interface fruitEat {
	public abstract void eatMethod();
}

创建超市里面的有的水果类

package com.wangxing.interfacetest3;

public class apple implements fruitPrice,fruitEat{
	@Override
	public void eatMethod(){
		System.out.println("可以削了皮吃。");
	}

	@Override
	public void priceMethod(){
		int price=8;
		System.out.println("苹果的价格为:"+price+"元/斤");
	}

}
package com.wangxing.interfacetest3;

public class xigua implements fruitPrice,fruitEat {

	@Override
	public void eatMethod() {
		System.out.println("切开吃。");
	}

	@Override
	public void priceMethod() {
		int price=12;
		System.out.println("苹果的价格为:"+price+"元/斤");
	}
}

创建用户要购买时触发的动作及得到的结果

package com.wangxing.interfacetest3;
import java.util.Scanner;

public class shuiGuoMain {
	public static void main(String args[]){
		boolean fag = true;
		while(fag){
			Scanner scn=new Scanner(System.in);
			System.out.println("请输入您要购买的水果:");
			String sg=scn.next();
			if(sg.equals("苹果")){
				apple ap=new apple();
				ap.priceMethod();
				ap.eatMethod();
			}
			if(sg.equals("西瓜")){
				xigua xg=new xigua();
				xg.priceMethod();
				xg.eatMethod();
			}
			if(!sg.equals("苹果")&&!sg.equals("西瓜")){
				System.out.println("我们超市没有此水果");
				fag=false;
			}
		}
	}
}

Java中接口

 这时超市拓展业务买文具这时候可以直接使用水果具有的价格功能

package com.wangxing.interfacetest3;

public class qianBi implements fruitPrice{

	@Override
	public void priceMethod() {
		int price=2;
		System.out.println("铅笔的价格为"+price);
	}

}

创建用户要购买文具时触发的动作及得到的结果

package com.wangxing.interfacetest3;
import java.util.Scanner;

public class wenJuMain {
	public static void main(String[] args) {
		boolean fag = true;
		while(fag){
			Scanner scn=new Scanner(System.in);
			System.out.println("请输入您要购买的文具:");
			String sg=scn.next();
			if(sg.equals("铅笔")){
				qianBi qb=new qianBi();
				qb.priceMethod();
			}

			if(!sg.equals("铅笔")){
				System.out.println("我们超市没有此文具");
				fag=false;
			}
		}
	}
}

Java中接口

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/79840.html

(0)
小半的头像小半

相关推荐

半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!