黑马程序员技术交流社区

标题: 抽象类与接口问题 [打印本页]

作者: 魏-玉-彪    时间: 2012-9-5 19:10
标题: 抽象类与接口问题

  含有抽象方法的类称为抽象类,抽象类使用abstract关键字修饰

接口:可以认为是一种特殊的抽象类,接口中声明的所有方法都是抽象的,所有的变量都是 final类型的

那么请问各位大侠,接口是否可以定义成抽象类?
或者说抽象类中是否可以:所有方法都是抽象的,所有的变量都是 final类型的?





作者: 杨锦    时间: 2012-9-5 19:32
抽象类
1.什么是抽象类
  用abstract修饰的类就是抽象类, 其中可以定义抽象方法(abstract修饰的方法)
2.什么时候用抽象类
  当多个类拥有相同的方法签名时, 我们可以将方法签名相同的方法抽取到父类中定义
  子类中签名和方法体都一样的方法, 直接在父类中定义, 子类继承即可
  子类中签名相同, 但方法体不同的方法, 在父类中定义抽象方法, 子类中对其重写
3.抽象类的细节
  抽象方法不能有方法体
  有抽象方法的类必须声明为抽象类
  子类继承抽象类, 要么重写所有抽象方法, 要么也声明为抽象类
  抽象类不能创建对象
  抽象类可以没有抽象方法(GUI)

接口
1.什么是接口
  接口是一种特殊的抽象类, 只能包含抽象方法
2.接口和抽象类的区别
  抽象类用abstract class定义, 接口用interface定义
  抽象类中可以有不抽象的方法, 接口中所有方法都是抽象的
  抽象类用extends继承, 接口用implements实现
  抽象类中的方法没有默认修饰符, 接口中的方法默认是public abstract修饰的
  抽象类中的成员变量没有默认修饰符, 接口中的成员变量默认是public static final修饰的
  一个类只能继承一个抽象类, 一个类可以实现多个接口
3.什么时候用抽象类, 什么时候用接口
  能用接口就不用抽象类, 除非必须要定义带有方法体的方
作者: 魏-玉-彪    时间: 2012-9-5 19:38
杨锦 发表于 2012-9-5 19:32
抽象类
1.什么是抽象类
  用abstract修饰的类就是抽象类, 其中可以定义抽象方法(abstract修饰的方法)

:victory:谢谢,此问题已解决
作者: 庄星睿    时间: 2012-9-5 21:05
抽象类中的内部是可以定义接口的,内部接口,
接口的内部也是可以定义接口的,内部接口
但反过来接口内部是不能定义抽象类的,接口中不能出现方法体
作者: 黑马--张帅    时间: 2012-9-5 21:32
完全可以:接口与抽象类的区别:
1,抽象类中可以定义抽象方法和非抽象方法,接口定义的必须是抽象方法
2,抽象类只能被继承,而且只能是单继承
    接口可以被实现,而且可以被多实现
3,类与类之间是继承关系,类与接口之间是实现关系
4,接口和类都是向上抽取而来的
5, 接口中属于成员都有固定的修饰符,成员变量时 public static final
   成员函数是 public abstract所有的属性的权限都是public。

抽象类的特点:
1,抽象方法一定在抽象类中
2,抽象方法和抽象类都必须被abstract关键字修饰
3,抽象类不可以用new创建对象,因为调用抽象方法没意义
4,抽象类中的抽象方法要被使用,必须由子类复写所有的抽象方法后,建立子类对象调用,如果子类只覆盖了部分抽象方法,那么子类还是一个抽象类


接口的特点:
1,接口是对外暴露的规则。
2,接口是程序的功能扩展。
3,接口可以用来多实现
4,类与接口是是实现关系,而且类可以继承一个类的同时实现对个接口。
5,接口与接口之间可以继承


作者: 乔九    时间: 2012-9-5 21:41
  抽象方法不能有方法体,必须声明为抽象类, 子类继承抽象类, 要么重写所有抽象方法, 要么也声明为抽象类不能创建对象, 抽象类中可以有不抽象的方法, 接口中所有方法都是抽象的。所以不可以。
作者: 魏-玉-彪    时间: 2012-9-6 17:41
谢谢各位大侠,此问题已解决 呵呵,回答已经解决的问题也加分呀{:soso__8961432591078930798_3:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2