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

发表于:2016-11-28 10:17

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:极客头条    来源:51Testing软件测试网采编

  抽象类和抽象方法
  在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.接口中可以定义内部类和内部接口
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号