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

Java 抽象类,抽象方法和接口

2015-03-26 20:50 155 查看

抽象类和抽象方法

在Java中用abstract修饰的类是抽象类,用abstract修饰的类的方法是抽象方法,抽象类和抽象方法用法总结如下。

1、abstract可以修饰class表示抽象类,可以修饰方法名表示抽象方法,但是不能修饰成员变量,也就是没有抽象的成员变量。

2、一个抽象类中可以有成员变量和成员方法。成员方法可以有抽象方法也可以有非抽象方法。

3、抽象类可以是内部类,抽象内部类可以用private修饰。

4、抽象类中的抽象方法不能有方法体。一个抽象方法必须对其子类可见,即不能用private修饰。如果一个类中有抽象方法,那么类必须定义为抽象类。例如:

[code]//抽象类中可以没有抽象方法,但有抽象方法的类必须定义为抽象类
abstract class C3 {
    //抽象类中可以有成员变量,成员变量不能用abstract修饰
    private int mPara;
    //抽象方法不能有方法体,抽象方法不能是private
    public abstract void setPara(int para);
    //抽象类中可以有非抽象方法
    public int getPara(){
        return mPara;
    }
}


5、一个抽象类可以继承自其他类,这个类可以是抽象类,也可以是非抽象类。如果它继承自抽象类,它可以选择实现抽象父类中的某个或某些抽象方法,也可以不实现,将实现父类的抽象方法的任务交给它的子类。

6、一个抽象类可以实现一个接口。它可以选择实现接口中的某个或某些接口方法,也可以不实现,将实现接口方法的任务交给它的子类。

7、抽象类只有被继承才有用,它的子类可以是抽象类,也可以是非抽象类。如果它的子类是非抽象类,则子类必须实现其所有的抽象方法。如果子类是抽象类,则会自动继承所有其所有的抽象方法,抽象子类中也可以定义新的抽象方法,该子类的某个非抽象子类必须实现所有的抽象方法。

8、抽象类可以用来定义变量,但不能构造对象,可以用抽象类定义的变量指向非抽象类子类的对象。

9、抽象类中可以有构造方法,但构造方法只能由其子类构造方法调用。抽象类的构造方法不能是抽象方法。

10、抽象类和抽象方法都不能用final修饰。

接口

在Java中用interface来定义一个接口,接口用法总结如下。

1、interface关键字只能用来定义接口,不能用来修饰类,成员变量或成员方法。

2、一个接口类中可以有成员变量和成员方法,也可以定义内部类或内部接口。

3、接口类中的成员变量一定是public static final的,但允许在声明变量时仅指定部分修饰符。但即使没有添加public,static,final中任何一个修饰符,该变量仍然是public static final的。此外,由于final成员变量必须在定义时初始化,因此,接口类中定义的成员变量必须在定义时赋值。赋值可以用常量表达式,也可以用任意在该接口中能够访问的对象组成的表达式。例如:

[code]private interface I1 {
    //len是public static final的,len必须被初始化
    int len = String.valueOf(new GregorianCalendar().getTimeInMillis()).length();
}


4、接口类中的成员变量在实现该接口的类中可以直接使用,在没有实现该接口,但是可见该接口的类中可以通过“接口名.成员变量名”来访问。例如:用I1.len来访问上述例子中的接口中定义的len成员变量。

5、接口类中的成员方法除了static成员方法外,都是public abstract的抽象方法,不能有方法体。允许声明成员方法时指定部分或不指定修饰符,但即使没有添加public abstract中任何一个修饰符,该成员方法仍然是public abstract的。static成员方法必须有方法体。接口中只有static方法有方法体,因此,接口中不能使用this和super关键字。

6、一个接口可以继承自其他接口。接口之间的继承用extends关键字,不能用implements。一个接口可以继承多个其他接口。多个接口之间用逗号分隔。例如:private interface I1 extends I2, I3{}。

7、一个接口不能继承自任何类,包括抽象类。

8、一个非抽象类如果实现了某个接口,它必须要实现该接口中声明的所有的抽象方法(接口中除了static方法外都是抽象方法)。一个抽象类如果实现了某个接口,它可以实现该接口中声明的抽象方法,也可以将实现接口方法的任务交给它的子类。

9、接口可以用来定义变量,但不能构造对象,可以用接口定义的变量指向实现该接口的类的对象。

10、接口没有构造函数。接口不能用final修饰。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: