第一次写博客,怎么说呢?一丝激动,一丝焦虑.激动的是自己终于算是走上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//接口之间的继承
{
}
abstract class Animal//抽象类
{
}
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基础知识重中之重是面向对象思想,要学好面向对象,必须要学会内存分析.所以内存分析我们一定要彻彻底底的明白!!!!