“Java的接口及用法”的版本间的差异

来自CloudWiki
跳转至: 导航搜索
接口的定义
 
(未显示同一用户的14个中间版本)
第1行: 第1行:
 
==问题引入==
 
==问题引入==
 
===代码改呀改===
 
===代码改呀改===
 +
[[文件:java20-8-2.png]]
 +
 +
甲、乙 :编写底层调用的代码。
 +
 +
丙:外部调用的代码,计算利润、成本、税收
 +
 
软件总是迭代升级的,内部代码总是不断更新
 
软件总是迭代升级的,内部代码总是不断更新
  
第21行: 第27行:
  
 
==接口的定义==
 
==接口的定义==
 +
接口的使用,和继承中的父类和子类有些相似,
 +
 +
分为'''接口'''和'''接口的实现类'''两部分。
 +
 +
'''接口'''定义某个功能的抽象存在。
 +
 +
'''接口的实现类''' 去具体实现这个功能
 +
 +
===接口===
 
接口是由常量和抽象方法组成的特殊类
 
接口是由常量和抽象方法组成的特殊类
  
第42行: 第57行:
 
注解:
 
注解:
  
*接口的访问修饰符只有public一个。
+
接口的访问修饰符只有public一个。
*接口可以被继承,它将继承父接口中的所有方法和常量。
+
 
 +
接口可以被继承,它将继承父接口中的所有方法和常量。
 +
 
 
*接口体只包含两部分,一是常量;二是抽象方法。
 
*接口体只包含两部分,一是常量;二是抽象方法。
 +
 
*接口中的常量必须赋值,并且接口中的属性都被默认为是final来修饰的常量。
 
*接口中的常量必须赋值,并且接口中的属性都被默认为是final来修饰的常量。
 +
 
*接口中的所有的方法都必须是抽象方法,抽象方法不需要使用abstract关键字声明,直接默认为是抽象的!
 
*接口中的所有的方法都必须是抽象方法,抽象方法不需要使用abstract关键字声明,直接默认为是抽象的!
  
==接口的实现和使用==
+
===接口的实现类===
 
既然接口里只有抽象方法,它只要声明而不用定义处理方式,于是自然可以联想到接口也没有办法像一般类一样,再用它来创建对象。利用接口打造新的类的过程,称之为接口的实现(implementation),同时实现了接口的类称之为接口实现类。接口实现格式如下:
 
既然接口里只有抽象方法,它只要声明而不用定义处理方式,于是自然可以联想到接口也没有办法像一般类一样,再用它来创建对象。利用接口打造新的类的过程,称之为接口的实现(implementation),同时实现了接口的类称之为接口实现类。接口实现格式如下:
  
第55行: 第74行:
 
 
 
}</nowiki>  
 
}</nowiki>  
 +
 +
 +
例子:
 +
 +
  <nowiki>public class BlackPrinter implements Printer{  //打印机接口
 +
 
 +
    public void print(String content){
 +
            print("black:"+content)   
 +
    }
 +
}</nowiki>
 +
====想一想:接口和接口的实现类 与 父类和子类有什么不同?====
 +
 +
==接口的实现和使用==
 +
背景:开发计税软件,
 +
 +
1.想开放接口供别人使用,
 +
 +
2.又不想让别人看到太多技术细节。
 +
 
===定义接口===
 
===定义接口===
  
第98行: 第136行:
  
 
===完成接口的调用===
 
===完成接口的调用===
 +
这里用到了接口回调技术。接口回调是指:可以将接口实现类的对象赋给该接口声明的接口变量中,那么该接口变量就可以调用接口实现类对象中的方法。
 +
 
  <nowiki>
 
  <nowiki>
  
第115行: 第155行:
  
 
==接口与多态==
 
==接口与多态==
===接口回调技术===
+
===接口的又一个实现类===
多态是面向对象编程思想的重要体现,它是建立在继承关系存在基础上的。接口与它的实现类之间存在实现关系,同时也就具有继承关系。因此'''接口可以像父类子类一样使用多态技术''',其中'''接口回调就是多态技术的体现'''。接口回调是指:可以将接口实现类的对象赋给该接口声明的接口变量中,那么该接口变量就可以调用接口实现类对象中的方法。不同的类在使用同一接口时,可能具有不同的功能体现,即接口实现类的方法体不必相同,因此,接口回调可能产生不同的行为。
+
 
 +
<nowiki>
 +
public class AllowanceTax implements Tax{
 +
protected String name;
 +
protected double income;
 +
 +
public AllowanceTax(String n,double i) {
 +
this.name = n;
 +
this.income = i;
 +
}
 +
    public double getTax() {
 +
        return 0;
 +
    }
 +
    public void setName(String name) {
 +
    this.name=name;
 +
    }
 +
    public void setIncome(double income) {
 +
    this.income = income;
 +
    }
 +
public static void main(String[] args) {
 +
// TODO Auto-generated method stub
 +
 
 +
}
 +
 
 +
}</nowiki>
 +
 
 +
===用接口实现的多态===
 +
 
 +
多态是面向对象编程思想的重要体现,它是建立在继承关系存在基础上的。接口与它的实现类之间存在实现关系,同时也就具有继承关系。因此'''接口可以像父类子类一样使用多态技术'''。不同的类在使用同一接口时,可能具有不同的功能体现,即接口实现类的方法体不必相同,因此,接口回调可能产生不同的行为。
  
 
【实例5-10】接口实现程序设计。
 
【实例5-10】接口实现程序设计。
  
<nowiki>public static void main(String[] args) {
+
(续上:接口的另一个
 +
 
 +
<nowiki>public static void main(String[] args) {
 
// TODO Auto-generated method stub
 
// TODO Auto-generated method stub
 
 
第132行: 第202行:
 
 
 
}</nowiki>
 
}</nowiki>
 +
==其他==
 +
  
==一个类同时实现多个接口==
+
===一个类同时实现多个接口===
 
Java 不支持多继承性,即一个类只能有一个父类。单继承性使得Java简单,易于管理程序。为了克服单继承的缺点,Java使用了接口,一个类可以实现多个接口。
 
Java 不支持多继承性,即一个类只能有一个父类。单继承性使得Java简单,易于管理程序。为了克服单继承的缺点,Java使用了接口,一个类可以实现多个接口。
  

2020年5月15日 (五) 03:54的最新版本

问题引入

代码改呀改

Java20-8-2.png

甲、乙 :编写底层调用的代码。

丙:外部调用的代码,计算利润、成本、税收

软件总是迭代升级的,内部代码总是不断更新

而现实是,外部调用它的代码总想保持稳定,这个矛盾如何解决 ?

接口的概念

Java5-101.jpg

接口这个概念,生活中就已存在,比如:

  • 笔记本的一侧提供了各种各样的接口,比如VGA接口、音频接口、网线接口等。我们不需知道笔记本内部的实现细节,就可以通过接口连接笔记本,实现相应功能。
  • 学生餐厅的各个窗口实际上上就是餐厅对外的一个个“接口”,我们不需要知道餐厅里做饭的细节,只需要通过餐厅一个个的窗口,就可以买饭、打饭。

在计算机中,Java 程序设计中的接口(Interface)也是一种规范,是用来组织应用程序中的类,并调节它们的相互关系。我们不需要知道程序内部实现的细节,只需要通过程序中提供的接口,就可以调用程序中相关的功能,实现我们想要的操作。

为什么使用接口

隐藏技术细节

在计算机中,Java 程序设计中的接口(Interface)也是一种规范,是用来组织应用程序中的类,并调节它们的相互关系。我们不需要知道程序内部实现的细节,只需要通过程序中提供的接口,就可以调用程序中相关的功能,实现我们想要的操作。

确保上层代码稳定

图书的业务处理需要对图书信息进行进行储存,并进行增加、删除、修改、查询等处理。但是随着我们项目的进展,图书信息可以被先后保存在内存中、文件中、数据库中,相应地,上述那些增删查改的底层操作方法可能会发生变化。为了保持上层业务的稳定性,避免因信息保存方式变化而修改上层业务代码,所以在我们的项目中通过接口描述图书增删查改处理,通过接口调用保持业务代码的稳定。

接口的定义

接口的使用,和继承中的父类和子类有些相似,

分为接口接口的实现类两部分。

接口定义某个功能的抽象存在。

接口的实现类 去具体实现这个功能

接口

接口是由常量和抽象方法组成的特殊类

接口的格式如下:

[public]  interface  接口名 [extends 接口1,接口2…] {

   [public]  [static]  [final] 数据类型 常量名=常量值;

   [public]  [static]  [abstract] 返回值 抽象方法名(参数列表);

}

由接口的声明的语法格式看出,接口是由常量和抽象方法组成的特殊类。 例子:

 public interface Printer {   //打印机接口
    public final int YEAR = 3;
    public void print(String content);
}

注解:

接口的访问修饰符只有public一个。

接口可以被继承,它将继承父接口中的所有方法和常量。

  • 接口体只包含两部分,一是常量;二是抽象方法。
  • 接口中的常量必须赋值,并且接口中的属性都被默认为是final来修饰的常量。
  • 接口中的所有的方法都必须是抽象方法,抽象方法不需要使用abstract关键字声明,直接默认为是抽象的!

接口的实现类

既然接口里只有抽象方法,它只要声明而不用定义处理方式,于是自然可以联想到接口也没有办法像一般类一样,再用它来创建对象。利用接口打造新的类的过程,称之为接口的实现(implementation),同时实现了接口的类称之为接口实现类。接口实现格式如下:

class 类名称 implements 接口A,接口B // 接口的实现
{
…
} 


例子:

 public class BlackPrinter implements Printer{   //打印机接口
   
    public void print(String content){
            print("black:"+content)     
    }
}

想一想:接口和接口的实现类 与 父类和子类有什么不同?

接口的实现和使用

背景:开发计税软件,

1.想开放接口供别人使用,

2.又不想让别人看到太多技术细节。

定义接口

public interface Tax {
	public void setName(String name);
        public void setIncome(double income);
	public double getTax();
}


编写接口的实现类

public class SalaryTax implements Tax{
	protected String name;
	protected double income;
	
	public SalaryTax(String n,double i) {
		this.name = n;
		this.income = i;
	}
    public void setName(String name) {
    	this.name=name;
    }
    public void setIncome(double income) {
    	this.income = income;
    }
    public double getTax() {
        if (income <= 5000) {
            return 0;
        }else if (income <=8000) {
            return (income - 5000) * 0.2;
        }else {
        	return (8000-5000)*0.2 +(income-8000)*0.3;
        }
    }
}

当类实现接口的时候,类要实现接口中所有的方法。否则,类必须声明为抽象的类。

类使用implements关键字实现接口。在类声明中,Implements关键字放在class声明后面。

完成接口的调用

这里用到了接口回调技术。接口回调是指:可以将接口实现类的对象赋给该接口声明的接口变量中,那么该接口变量就可以调用接口实现类对象中的方法。



public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Tax t1 =  new SalaryTax("张丽",7500);
		t1.setName("张丽");t1.setIncome(8000);		
		System.out.println("纳税额="+t1.getTax());		
		
	}

}

接口与多态

接口的又一个实现类

public class AllowanceTax implements Tax{
	protected String name;
	protected double income;
		
	public AllowanceTax(String n,double i) {
		this.name = n;
		this.income = i;
	}
    public double getTax() {
        return 0;
    }
    public void setName(String name) {
    	this.name=name;
    }
    public void setIncome(double income) {
    	this.income = income;
    }
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}

用接口实现的多态

多态是面向对象编程思想的重要体现,它是建立在继承关系存在基础上的。接口与它的实现类之间存在实现关系,同时也就具有继承关系。因此接口可以像父类子类一样使用多态技术。不同的类在使用同一接口时,可能具有不同的功能体现,即接口实现类的方法体不必相同,因此,接口回调可能产生不同的行为。

【实例5-10】接口实现程序设计。

(续上:接口的另一个

public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Tax t1 =  new SalaryTax("张丽",7500);//接口变量存放对象的引用
		Tax t2 =  new AllowanceTax("王博士",15000);//接口变量存放对象的引用
				
		System.out.println("纳税额1="+t1.getTax());//接口回调
		System.out.println("纳税额2="+t2.getTax());//接口回调
		//以上两个getTax函数的实现是否相同?这体现了什么 ?
		
		
	}

其他

一个类同时实现多个接口

Java 不支持多继承性,即一个类只能有一个父类。单继承性使得Java简单,易于管理程序。为了克服单继承的缺点,Java使用了接口,一个类可以实现多个接口。

例:一体机类同时实现了打印机和复印件两个接口。

打印机接口:

public interface Printer {   //打印机接口
    public void print(String content);
}

复印机接口:

public interface Copier {   //打印机接口
    public void copy(String content);
}

综合型一体机:(综合实现了打印机和复印件的接口)

public class AllPrinter implements Printer,Copier {
    public void print(String content) {
    	    System.out.println("多功能一体机开始打印:");
    	    System.out.println(content);
    }
    public void copy(String content) {
    	    System.out.println("多功能一体机开始复印:");
    	    System.out.println(content);
    }
}


主类MainClass:

package main;
import entity.*;
/*本类对应实训: */
public class MainClass {
	  public static void main(String[] args) {
		  Printer cp = new BlackPrinter();
		  //Printer cp = new ColorPrinter();
		  cp.print("    创业计划书");
		  
		 
		  AllPrinter ap = new  AllPrinter();
		  ap.print("    创业计划书");
          ap.copy("    创业计划书");   
          
		 
	      
	  }
}


接口的使用与类的使用有些不同。类会直接使用new关键字来构建一个类的实例进行应用,而接口只能被它的实现类进行进一步的实现才能发挥作用。

参考文档:

[1] https://blog.csdn.net/jdsjlzx/article/details/51974360

[2] https://blog.csdn.net/wei_zhi/article/details/52743109


返回 Java程序设计