8、抽象类与接口

来源:互联网 发布:nba2k18超帅捏脸数据 编辑:程序博客网 时间:2024/04/30 15:49

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

1、抽象类的特点:
   1.抽象方法一定在抽象类中。
   2.抽象方法和抽象类都必须被abstract关键字修饰。
   3.抽象类不可以用new创建对象,因为调用抽象方法没意义。
   4.抽象类中的方法要被使用,必须由子类复写其所有的抽象方法后,建立子类对象调用。
     如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。
1、定义接口
    使用interface来定义一个接口。接口定义同类的定义类似,也是分为接口的声明和接口体,其中接口体由常量定义和方法定义两部分组成。定义接口的基本格式如下:
        [修饰符] interface 接口名 [extends 父接口名列表]{
        [public] [static] [final] 常量;
        [public] [abstract] 方法;
        }
修饰符:可选,用于指定接口的访问权限,可选值为public。如果省略则使用默认的访问权限。
接口名:必选参数,用于指定接口的名称,接口名必须是合法的Java标识符。一般情况下,要求首字母大写。
extends 父接口名列表:可选参数,用于指定要定义的接口继承于哪个父接口。当使用extends关键字时,父接口名为必选参数。
方法:接口中的方法只有定义而没有被实现。

 注意:   与Java的类文件一样,接口文件的文件名必须与接口名相同。
2、实现接口
          接口在定义后,就可以在类中实现该接口。在类中实现接口可以使用关键字implements,其基本格式如下:
            [修饰符] class <类名> [extends 父类名] [implements 接口列表]{
            }
  修饰符:可选参数,用于指定类的访问权限,可选值为public、abstract和final。
  类名:必选参数,用于指定类的名称,类名必须是合法的Java标识符。一般情况下,要求首字母大写。
  extends 父类名:可选参数,用于指定要定义的类继承于哪个父类。当使用extends关键字时,父类名为必选参数。
  implements 接口列表:可选参数,用于指定该类实现的是哪些接口。当使用implements关键字时,接口列表为必选参数。当接口列表中存在多个接口名时,各个接口名之间使用逗号分隔。
    注意:接口之间支持多继承,但是接口在多继承的时候,要保证如果多个接口中存在同名的方法的时候,必须保证返回值一致,否则编译报错。
              接口只能继承(extends)接口 不能实现(implements)接口
              类只能实现(implements)接口 不能继承(extends)接口
       在类中实现接口时,方法的名字、返回值类型、参数的个数及类型必须与接口中的完全一致,并且必须实现接口中的所有方法。
       在类的继承中,只能做单重继承,而实现接口时,一次则可以实现多个接口,每个接口间使用逗号“,”分隔。这时就可能出现常量或方法名冲突的情况,解决该问题时,如果常量冲突,则需要明确指定常量的接口,这可以通过“接口名.常量”实现。如果出现方法冲突时,则只要实现一个方法就可以了 。

3、abstract class和interface有什么区别?
  含有abstract修饰符的class即为抽象类,abstract类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。
  接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。
下面比较一下两者的语法区别:
  1.抽象类可以有构造方法,接口中不能有构造方法。
  2.抽象类中可以有普通成员变量,接口中没有普通成员变量
  3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
  4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
  5. 抽象类中可以包含静态方法,接口中不能包含静态方法
  6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
  7. 一个类可以实现多个接口,但只能继承一个抽象类。
下面接着再说说两者在应用上的区别:
  接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。而抽象类在代码实现方面发挥作用,可以实现代码的重用,例如,模板方法设计模式是抽象类的一个典型应用

4、接口和object的区别
 接口不继承任何类。类可以实现接口。解释如下
接口中的方法是public abstract 修饰。 全是抽象方法
变量是 public static final修饰。
倘若接口继承了Object类,那么将继承Object中的实方法,包括常见的toString equals 等。
这两个方法都不是抽象方法,与接口中必须是抽象方法矛盾。
接口和Object是并列关系,并不是接口继承了Object。
接口是接口,而在类的世界里,所有类都继承了Object,
但是接口和类属于不同的世界,所以接口没有继承Object

0 0
原创粉丝点击