java 接口

第九章 接口

1.接口的规范:

接口中只能够有常量和抽象方法,不能够有变量、初始化块、构造方法。

(1)定义接口

修饰符  interface  接口名称   {

//声明变量

数据类型   变量名;

//声明抽象方法

返回类型   方法名(参数);

}

接口中的变量会被自动认为是,公共的、静态的、最终的变量。

public interface MyInterface {
   int a=1001;
   public void display();
} 

这里的a被定义为静态、公共的,所以在使用的时候是不能再次进行赋值的。

要点:

接口的修饰符只能为public或者是缺省的修饰符

在接口中,接口定义的方法都为抽象方法,他们自动的设置为public的。

(2)实现接口

实现接口需要实现接口中所有的抽象方法,接口的实现是指具体实现接口的类。

Class  类名  implements 接口1,接口2{

方法1(){.......}

}

由关键字表示实现的接口,多个接口之间用逗号隔开。实现接口需要注意以下几点:

1. 为接口中所有方法提供具体的实现

2. 必须遵守重写的规范

3. 保持相同的返回类型

展示代码:

public  class Manager {
public static void main(String[] args){
Manager m=new Manager();
Otest test=m.new Otest();
System.out.println("3+5="+test.add(3, 5));
System.out.println("5-3="+test.sub(5, 3));
System.out.println("3*5="+test.mul(3, 5));
}
interface Oadd{
double add(double a,double b);
}
nterface Osub{
double sub(double a,double b);
}
interface Omul{
double mul(double a,double b);
}
interface Oumul{
double umul(double a,double b);
}

class Otest implements Oadd,Osub,Omul,Oumul{
public double add(double a,double b){
return a+b;
}
public double sub(double a,double b){
return a-b;
}
public double mul(double a,double b){
return a*b;
}
public double umul(double a,double b){
if(b==0) {System.out.println("分母不能为零");
return 0;
}
else return a/b;
}
}
}

抽象类实现接口

当抽象类实现接口的时候,可以不用实现接口中全部的方法。

-----定义了一个Anmial接口
interface Anmial {
public void run();
public void action();
public void eat();
}
-----定义了一个People抽象类--实现Anmial接口(可以只实现部分接口中的方法)
public abstract class People implements Anmial{
public void run() {
	System.out.println("人类正在跑");
}
}
-----定义一个Student类继承抽象类People
-----这是要将所有的没有是实现的方法实现(包括接口中的)
public class Student extends People {

	@Override
	public void action() {
		// TODO Auto-generated method stub
		System.out.println("student实现动作应激性的功能");
	}

	@Override
	public void eat() {
		// TODO Auto-generated method stub
		System.out.println("student中实现吃的功能");
	}

}

2.接口的引用

在java中可以建立接口类型的引用变量,接口的引用变量可以存储一个指向对象的值的引用,而这个对象可以是任何实现该接口的实例,对象的方法必须是类中非抽象方法。

package test01;
public  class Manager {
public static void main(String[] args){
Manager m=new Manager();
Otest test=m.new Otest();
System.out.println("3+5="+test.add(3, 5));
System.out.println("5-3="+test.sub(5, 3));
System.out.println("3*5="+test.mul(3, 5));
Oadd al=test;//接口的引用,调用该接口中的方法
System.out.println("3+5="+al.add(3, 5));
}
interface Oadd{
double add(double a,double b);
}
interface Osub{
double sub(double a,double b);
}
interface Omul{
double mul(double a,double b);
}
interface Oumul{
double umul(double a,double b);
}
class Otest implements Oadd,Osub,Omul,Oumul{
public double add(double a,double b){
return a+b;
}
public double sub(double a,double b){
return a-b;
}
public double mul(double a,double b){
return a*b;
}
public double umul(double a,double b){
if(b==0) {System.out.println("分母不能为零");
return 0;
}
else return a/b;
}
}
}

3.内部类

内部类就是定义于类内部的类。

内部类是一个非常有用的机制,通过内部类的定义,程序员将一些逻辑上相关的类组织在一起,通过内部类的使用可以很好的控制内部类的可见性。

(1)匿名内部类

所谓匿名内部类,就是没有名称的内部类

如果匿名类继承或实现的接口,自己有带参数的构造方法,没有无参数的构造方法,该用如下形式创建此匿名类

 父类名  对象名=new 父类名(有时候为接口)(参数){

//实现接口的方法等等

};

public class MyFile {
	public static void main(String[] args) {
		Oadd add=new Oadd() {
			public double add(double a,double b) {
				return a+b;
			}
		};
		System.out.println(add.add(1, 2));
	}
}

4.接口的继承

接口的集成在简单的程序中可能会用不到,但是在复杂的程序中会用到,而且也具有很大的便利性。在这里知识大体上讲述一下。

interface Anmial  extends Biology{
public void run();
public void eat();
}
具体例子就是这样(对了,接口支持多继承

 

 


posted @ 2018-03-13 10:36  sunchongwei  阅读(170)  评论(0编辑  收藏  举报