java接口是是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
接口实现和类继承的规则不同,为了数据的安全,继承时一个类只有一个直接父类,也就是单继承,但是一个类可以实现多个接口,接口弥补了类的不能多继承缺点,继承和接口的双重设计既保持了类的数据安全也变相实现了多继承。java采用关键字interface创建一个接口。接口就是告诉程序需要做什么只不过这些方法都没实现,没有函数体。首先还是来看几个程序。
interface information
{
void setTeacherName(String schoolname);
void setCode(String code);
void setSexy(String sexy);
void setBirthday(String birthday);
void setFamilyAddress(String familyaddress);
String getTeacherName();
String getCode();
String getSexy();
String getBirthday();
String getFamilyAddress();
}
以上就是实现了一个接口,是关于老师的信息接口,包括姓名、号码、生日、地址、性别信息。下面就只需要去用教师类去实现接口就好了。使用关键字implements实现。继续看下面代码。
class teacher implements information
{
private String teachername;
private String teachercode;
private String teachersexy;
private String teacherbirthday;
private String familyaddress;
public void setname(String teachername)
{
this.teachername=teachername;
}
public void setcode(String teachercode)
{
this.teachercode=teachercode;
}
public void setsexy(String teachersexy)
{
this.teachersexy=teachersexy;
}
public void setbirthday(String teacherbirthday)
{
this.teacherbirthday=teacherbirthday;
}
public void setfamilyaddress(String familyaddress)
{
this.familyaddress=familyaddress;
}
public String getcode()
{
return teachercode;
}
public String getsexy()
{
return teachersexy;
}
public String getbirthday()
{
return teacherbirthday;
}
public String getfamilyaddress()
{
return familyaddress;
}
public String tostring()
{
String infor=" 教师姓名:"+teachername+" "+"教师工号:"+teachercode+" "+"性别:"+teachersexy+" "+"出生年月:"+teacherbirthday+" "+"家庭地址:"+familyaddress;
return infor;
}
}
一个类可以同时实现多个接口,一个接口也可以同时被多个类实现。接口之间也可以有继承关系。
interface schooInfor
{
void setschoolname(String schoolname);
void setclassname(String schoolclassname);
String getschoolname();
String getclassname();
}
interface schooInforAdd extends schooInfor
{
void setname(String name);
void setcode(String code);
void setsexy(String sexy);
void setbirthday(String birthday);
void setfamilyaddress(String familyaddress);
String getname();
String getcode();
String getsexy();
String getbirthday();
String getfamilyaddress();
}
一个接口可以被多个类实现:
class student implements schooInfor
class teacher implements schooInfor
一个类实现多个接口
class teacher implements schoolinfor1,schoolinfor2
关于java内部类
java内部类分为: 成员内部类、静态嵌套类、方法内部类、匿名内部类 。内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号 ;内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否是private的 ;内部类声明成静态的,就不能随便的访问外部类的成员变量了,此时内部类只能访问外部类的静态成员变量 。(参考百度百科)
class Outer {
class Inner{}
}
编译上述代码会产生两个文件:Outer.class和Outer$Inner.class。
public class InnerClasses
{
private static String staticAttribute = "Outter class' static attribute";
private String instantiateAttribute = "Outter class' instantiate attribute";
public void instantiateMethod()
{
System.out.println("Outter class' intantiate method");
}
public static void staticMethod()
{
System.out.println("Outter class' static method");
}
public static class StaticInnerClass
{
public StaticInnerClass()
{
System.out.println("static Inner class");
}
public void access()
{
System.out.println(staticAttribute);
staticMethod();
}
}
为什么要使用内部类?
典型的情况是,内部类继承自某个类或实现某个接口,内部类的代码操作创建其他外围类的对象。所以你可以认为内部类提供了某种进入其外围类的窗口。使用内部类最吸引人的原因是:每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得完整。接口解决了部分问题,而内部类有效地实现了“多重继承”。