为什么需要接口?接口和抽象类的区别?
– 接口就是比“抽象类”还“抽象”的“抽象类” ,可以更加规范的对子类迚行约束。 全面地专业地实现了:规范和具体实现的分离。
– 接口就是规范,定义的是一组规则,体现了现实世界中“如果你是…则必须 能…”的思想。如果你是天使,则必须能飞。如果你是汽车,则必须能跑。如果你好人,则必须干掉坏 人;如果你是坏人,则必须欺负好人。
– 接口的本质是契约,就像我们人间的法律一样。制定好后大家都遵守。
– 项目的具体需求是多变的,我们必须以不变应万变才能从容开发,此处的 “不变”就是“规范” 。因此,我们开发项目往往都是面向接口编程!
接口相关规则
– 接口中所有方法都是抽象的。
– 即使没有显式的将接口中的成员用public标示,也是public访问类型的
– 接口中变量默认用 public static final标示,所以接口中定义的变量就是全 局静态常量。
– 可以定义一个新接口,用extends去继承一个已有的接口
– 可以定义一个类,用implements去实现一个接口中所有方法。
– 可以定义一个抽象类,用implements去实现一个接口中部分方法。
如何定义接口?
–格式:
▪[访问修饰符] interface 接口名 [extends 父接口1,父接口2…] {
–常量定义
//总是public static final
–方法定义
//总是:public abstract}
如何实现接口
–子类通过implements来实现接口中的规范
–接口不能创建实例,但是可用于声明引用变量类型。
–一个类实现了接口,必须实现接口中所有的方法,并且这些方法只能是public的。
–Java的类只支持单继承,接口支持多继承
▪ C++支持多重继承,Java支持单重继承
▪ C++多重继承的危险性在于一个类可能继承了同一个方法的不同实 现,会导致系统崩溃。
▪ Java中,一个类只能继承一个类,但同时可以实现多个接口,既可 以实现多重继承的效果和功能,也避免的多重继承的危险性。
▪ class Student extents Person implements Runner,Flyer
▪ {…}
▪ 注意:extends 必须位于implements之前
内部类—成员内部类
把一个类定义在另一个类的内部称为内部类
注意事项:
(1)外部类不能直接使用内部类的成员和方法 ▪
(2)如果外部类和内部类具有相同的成员变量戒方法,内部类
默认访问自己的成员变量戒方法,如果要访问外部类的成员变量,
需使用this关键字
语法
外部类 外部类对象=new 外部类(); ▪ 外部类.内部类 内部类对象=外部类对象.new 内部类 ();
public static void main(String [] args){
Outer out=new Outer();//创建外部类的对象
Outer.Inner inner=out.new Inner();//创建内部类的对象
inner.print();//访问内部类的方法
如果主方法在外部类内部,则可以省略Outer Inner inner=out.new Inner();
new 外部类类名.内部类().方法名
外部类类名.内部类 内部类对象名=new 外部类类名.内部类类名();
package cn.bjsxt.demo;//声明包
class Outer//声明类
{
private static String info="hello World";//声明私有属性
static class Inner//声明静态内部类
{
public void print(){//打印输出的方法
System.out.println(info);
}
}
public static void main(String [] args){
new Outer. Inner().print();//调用方法
}
}
使用static声明的内部类不能访问非static的外部属性
内部类--匿名内部类
适合只需要使用一次的类,安卓中使用的比较多
this.addWindowListener(new WindowAdapter(){
@Override
public void windowClosing(WindowEvent e){
System.exit(0);
}
})
方法内部类是指:将内部类定义在外部类的方法 中。
▪ 注意事项:
▪ (1)方法内部类不能在外部类的方法以外的地 方使用,所以
▪ 方法内部类不能使用访问控制符和static修饰符