您的位置:首页 > 编程语言 > Java开发

浅谈一下JAVA中的接口interface

2015-11-12 13:02 459 查看
第一次写博客,怎么说呢?一丝激动,一丝焦虑.激动的是自己终于算是走上IT这条路上的一条小径上了,焦虑的是自己该如何走好这条路.可回过头来仔细想想,还是要认真走好每一步,眼下最重要的还是如何写好这篇博客,一些拙见,望各位同学,同志给予改正和[批评.

谈到接口(interface),不得不提的是抽象类(abstract class).因为从某种意义上来说,接口interface就是一个抽象类.为什么这么说呢?抽象类之所以能成为抽象类,是因为它里面一定会有一个抽象方法的存在,抽象方法只能声明,不能被调用.所以要用到抽象方法,一定要对抽象方法进行重写,对抽象类进行继承.也就是大家常说的抽象类必须被继承,抽象方法必须被重写.接口也同样如此,只不过说法不一样.我们用接口的时候会去说让某个类去实现它,而不是说去继承它.接口里面同样也有抽象方法,也同样需要被重写.所以我说接口就是一个特殊的抽象类.

好了,介绍完接口和抽象类之间的关系,下面我们来看一下接口的语法格式以及它的一些特点.

首先是它的语法格式如下://英语不好的同学请自行有道,,我就不多做解释了

<modifier> class <name>[implents<interface>[,<interface>*]]{

<declarations>*

}

接口作为一个特殊的类型也有它的几个特点:

1.多个无关的类可以实现一个接口//看如下代码,学生类和老师类都实现了Singer接口

interface Singer//定义一个唱歌的接口以及里面的两个抽象方法

{

public void sing();

public void sleep();

}

interface Painter//定义一个画画的接口以及里面的两个抽象方法

{

public void paint();

public void eat();

}

public class Student implents Singer//Student类实现Singer接口

{

private string name;

Student(string name ){this.name = name;}

public void study(){System.out.println("studying");}

public void sing(){System.out.println("Student is singing");}//重写接口中的构造方法

public void sleep(){System.out.println("Student is sleeping")}

}

值得一提的是重写抽象方法,要求方法完全一样,即权限修饰符,返回值类型,方法名,形参完全相同.所以在这有一个小技巧我想告诉大家就是去COPY IT .

2.一个类可以实现多个无关的接口

//老师类既实现了Singer类又实现了Painter类

class Teacher implements Singer,Painter

{

private string name;

public string getString()

{

return name;

}

public void teach(){Systeme.out.println(teacher is teaching);}

public void sing(){System.out.println("teacher is sing");}

public void sleep(){System.out.println("teacher is sleeping");}

public void paint(){System.out.println("teacher is painting");}

public void eat(){System.out.println("teacher is eating");}

}

3.与继承关系类似,接口与实现类之间存在多态关系

public class Testinterface

{

public static void main(String[] args)

{

Singer s1 = new Student("le");

s1.sing();s1.sleep();//在这里只能调用Student类里的sing()和sleep()方法,因为Singer接口只暴露了Student类中的sing()方法和sleep()方法.

Singer s2 = new Teacher("David");

s2.sing();s2.sleep();//同样道理,Singer接口只暴露了Student类中的sing()方法和sleep方法();

Painter p1 = (Painter)s2;//把Teacher类的引用s2强制转化为Painter类型的并且给了新引用p1;

p1.paint();p1.eat();//Painter接口类型的引用p1只暴露了Teacher类中的paint()方法和eat()方法.

}

内存分析:

因为没有合适的制图工具,所以偷个懒给大家找了个截图.

}

4.抽象类是变量和抽象方法的集合,其中的变量的默认修饰符是 public static final,表示该变量已被定义与赋值,不得对变量再进行任何改动

最后我找到一个关于接口(interface)的实例来帮助大家更好的来理解什么是接口,接口怎么用,以及接口的的几个性质.

PS:这都是dadadada胖纸丶手敲上去的......

public interface Valueable//接口定义

{

public double getMoney();//抽象方法

}

public interface Protectable//接口定义

{

public void beProtectde();//抽象方法

}

interface A extends Protectable//接口之间的继承

{

void m();

}

abstract class Animal//抽象类

{

private string name;
abstract void enjoy();//抽象方法

}

class GoldenMonkey extends Animal implements Valuable,Protectable

{

public double getMoney()//抽象方法重写

{

return 100000;

}

public void beProtected()//重写抽象方法

{

System.ouit.println("live in the cage");

}

public void enjoy ()//重写抽象类中的抽象方法

{

//空方法

}

public void test()//测试方法

{

Valuable v = new GoldenMokey();

v.getMoney();

Protected p = (Protectable)v;

p.beProtected();

}

}

class Hen implements A//要实现A接口,就必须实现Protected接口,因为A接口继承了Protected接口

{

public void m();//重写接口A中的抽象方法

public void protected();//重写接口Protected中的抽象方法

}

好了,以上就是我对接口(interface)的一些认识,希望大家能多多给予一些意见和指导

最后我想对和我一样想对andriod开发有兴趣的人说:要想学andriod,必须先学好一些JAVA的基础知识,而JAVA基础知识重中之重是面向对象思想,要学好面向对象,必须要学会内存分析.所以内存分析我们一定要彻彻底底的明白!!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: