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

java中的抽象类,接口,内部类

2010-01-04 00:45 281 查看
抽象类(abstract class):

在class前加上abstract的类就是抽象类,如:public abstract class A{};

用abstract关键字来修饰一个类时,这个类叫做抽象类;用abstract来修饰一个方法时,该方法叫做抽象方法(抽象方法没有方法体)。

含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写。

抽象类不能被实例化。

抽象方法只需声明,而不需实现。

类中可以没有抽象方法,但是抽象方法必须位于抽象类中!

子类继承抽象类必须重写抽象类里面的全部抽象方法。

使用抽象类的唯一途径是派生一个子类,如果这个子类实现了抽象类中所有的抽象方法,

那么这个子类就是一个普通的类。它可以用来创建对象。如果不实现父类中的所有抽象方法,

那么它也是一个抽象类,剩下的方法由它的子类实现。

抽象方法不能是静态方法,因为静态方法无需对象就能执行。

抽象类不能new抽象类。

接口(interface):

从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。

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

一个类可以实现多个无关的接口(接口变相地实现了多继承)

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

接口里面只能有抽象方法,但是这种抽象方法没有abstract关键字。

接口特性:

接口可以多重实现;

接口中声明的属性默认为public static final的;也只能是public static final的;

接口中只能定义抽象方法,而且这些方法默认为public的、也只能是public的;

接口可以继承其它的接口,并添加新的属性和抽象方法。

接口定义举例

public interface Runner {

int id = 1;//这里默认为常量

public void start();

public void run();

public void stop();

}

综合例子:

public interface Runner {

public void start();

public void run();

public void stop();

}

public class Person implements Runner{

public void start()

{

System.out.println("弯腰,蹬腿,咬牙,瞪眼,开跑");

}

public void run()

{

System.out.println("摆动手臂,维持直线方向");

}

public void stop()

{

System.out.println("减速直至停止,喝水");

}

public static void main(String args[])

{

Runner wanghui = new Person();

wanghui.start();

wanghui.run();

wanghui.stop();

System.out.println("/n");

}

}

输出结果:

弯腰,蹬腿,咬牙,瞪眼,开跑

摆动手臂,维持直线方向

减速直至停止,喝水

内部类:

总结:最最重要的一句话:抽象方法必须被重写,抽象类必须被继承。

子类继承抽象类必须重写抽象类里面的全部抽象方法。

接口是一种特殊的抽象类!

届口里面的抽象方法必须全部实现。

抽象类里面可以有非抽象方法,也就是实体方法。接口里面绝对不允许有实体方法。接口里面只能有抽象方法,但是这种抽象方法没有abstract关键字。

抽象类不可以new,同理,接口也不可以new

抽象类可以没有抽象方法

内部类(Inner class):

在Java中,允许一个类的定义位于另一个类的内部,前者称为内部类

内部类和外层封装它的类之间存在逻辑上的所属关系

Inner class一般用在定义它的类或语句块之内,在外部引用它时必须给出完整的名称。 Inner class的名字不能与包含它的类名相同;

Inner class可以使用包含它的类的静态和实例成员变量,也可以使用它所在方法的局部变量;

内部类特性:

Inner class可以声明为抽象类 ,因此可以被其它的内部类继承。也可以声明为final的。

和外层类不同,Inner class可以声明为private或protected;

Inner class 可以声明为static的,但此时就不能再使用外层封装类的非static的成员变量;

非static的内部类中的成员不能声明为static的,只有在顶层类或static的内部类中才可声明static成员;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: