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

抽象类和抽象方法

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

  1. abstract可以修饰class表示抽象类,可以修饰方法表示抽象方法,但是不能修饰成员变量,也就是没有抽象的成员变量。
  2. 用abstract修饰的类中可以有abstract方法,也可以没有abstract方法;可以有非abstract方法,也可以没有非abstract方法。
  3. 只有abstract类中才能声明abstract方法,abstract方法不能声明在非abstract类中。
  4. abstract类可以是外部类,也可以是内部类。abstract类如果是外部类,不能用private修饰;abstract类如果是内部类,可以用private修饰。
  5. abstract方法不能有方法体,abstract方法必须对其子类可见,即不能用private修饰。

    // abstract类中可以没有abstract方法,但有abstract方法的类必须定义为abstract类
    abstract class C3 {
        // abstract类中可以有成员变量,但成员变量不能用abstract修饰
        private int mPara;
        // abstract方法不能有方法体,abstract方法不能是private
        public abstract void setPara(int para);
        // 抽象类中可以有非抽象方法
        public int getPara(){
            return mPara;
        }
    }
  6. abstract类可以继承自其他类,这个父类可以是abstract类,也可以是非abstract类。如果它继承自abstract类,它可以选择实现其父类中的abstract方法,也可以不实现。

  7. abstract类可以实现一个接口。它可以选择实现接口中的接口方法,也可以不实现。
  8. abstract类只有被继承时才有用,它的子类可以是abstract类,也可以是非abstract类。如果它的子类是abstract类,则会自动继承所有其所有的abstract方法,abstract子类中也可以定义新的abstract方法,如果它的子类是非abstract类,则子类必须实现其所有的abstract方法。
  9. abstract类可以用来定义变量,但不能实例化,也就是不能通过new来构造一个abstract类的对象。abstract类定义的变量可以被赋值为其非abstract子类的对象。
  10. abstract类中可以有构造方法,抽象类的构造方法不能是抽象方法。
  11. abstract类和abstract方法都不能用final修饰。

接口

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

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

    private interface I1 {
        //len是public static final的,len必须被初始化
        int len = String.valueOf(new GregorianCalendar().getTimeInMillis()).length();
    }
  3. interface中的成员变量在实现该接口的类中可以直接使用,在没有实现该接口,但是可见该接口的类中可以通过“接口名.成员变量名”来访问。例如:用I1.len来访问上述例子中的接口中定义的len成员变量。

  4. interface中可以有成员方法,成员方法都是public abstract的抽象方法,不能有方法体。允许声明成员方法时指定部分或不指定修饰符,但即使没有添加public abstract中任何一个修饰符,该成员方法仍然是public abstract的。
  5. 一个接口可以继承自其他接口。接口之间的继承用extends关键字,不能用implements。一个接口可以继承多个其他接口。多个接口之间用逗号分隔。例如:private interface I1 extends I2, I3{}
  6. 一个接口不能继承自任何类,包括抽象类。
  7. 一个非抽象类如果实现了某个接口,它必须要实现该接口中声明的所有的抽象方法。一个抽象类如果实现了某个接口,它可以实现该接口中声明的抽象方法,也可以不实现。
  8. 接口可以用来定义变量,但不能实例化,也就是不能通过new来构造一个接口的对象。接口定义的变量可以被赋值为实现该接口的类的对象。
  9. 接口中没有构造方法。接口不能用final修饰。
  10. 接口中可以定义内部类和内部接口
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值