接口,是描述类具有什么样的功能,而不是给出每个功能的实现。一个类可以implements多个接口...接口中可以含有 变量和方法。但是要注意,
接口中的变量会被隐式地指定为public static final变量(并且只能是public static final变量,用private修饰会报编译错误),而方法会被隐式地指定
为public abstract方法且只能是public abstract方法(用其他关键字,比如private、protected、static、 final等修饰会报编译错误),并且接口中
所有的方法不能有具体的实现,也就是说,接口中的方法必须都是抽象方法。从这里可以隐约看出接口和抽象类的区别,接口是一种极度抽象的类型,
它比抽象类更加“抽象”,并且一般情况下不在接口中定义变量。
定义一个接口,名字叫animal ,假设都有吃和睡的功能。
public interface Animal { void eat(); void sleep(); }
同时定义一个Cats接口,猫科动物的特性。
public interface Cats { public void climb(); public void hunt(); }
猫同时继承这两个接口,并实现方法。
public class Cat implements Animal,Cats{ @Override public void eat() { System.out.println("吃鱼"); } @Override public void sleep() { System.out.println("白天睡觉"); } @Override public void climb() { System.out.println("猫会爬树"); } @Override public void hunt() { System.out.println("猫会抓老鼠"); } }
狗是动物,但不是猫科动物。同时狗有特殊的看家本领,所以它应该具有特殊的方法!
public class Dog implements Animal{ @Override public void eat() { System.out.println("吃狗粮"); } @Override public void sleep() { System.out.println("晚上睡觉"); } public void Housekeeping(){ System.out.println("狗会看家"); } }
测试一下。。
public class TestInterface { public static void main(String[] args) { Animal dog = new Dog(); dog.eat(); dog.sleep(); //dog.Housekeeping();这里会报错,因为接口里并没有这个方法 Cats cat = new Cat(); cat.climb(); cat.hunt(); } }
二.内部类
http://www.cnblogs.com/dolphin0520/p/3811445.html