黑马程序员_抽象类和接口

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

抽象类体现数据抽象的思想,是实现程序多态性的一种手段。接口则是Java中实现多重继承的唯一途径。

一、抽象类:

        抽象类的作用在于将许多有关的类组织在一起,提供一个公共的类,即抽象类,而那些被它组织在一起的具体的类做为它的子类由它派生出来。定义一个抽象类的关键字是abstract,格式如下:
        abstract  class  abstractClass{ /* 类定义体 */ }
        抽象方法是指在返回值类型前加上abstract关键字,且没有方法体。格式如下:
        abstract<返回值类型><抽象方法名>([<形式参数列表>]);

        注意:所谓没有方法体,即连{...}也没有。


        对于抽象类与抽象方法的限制:

        (1) 用abstract 修饰符修饰的类被称为抽象类。用abstract 修饰符修饰的成员方法被称为抽象方法; 
        (2) 抽象类中可以有零个或多个抽象方法,也可以包含非抽象的方法;
        (3) 抽象类中可以没有抽象方法,但是,有抽象方法的类必须是抽象类;
        (4) 对于抽象方法来说,在抽象类中只指定其方法名及其类型,而不书写其实现代码;
        (5) 抽象类可以派生子类,在抽象类派生的子类中必须实现抽象类中定义的所有抽象方法;
        (6) 抽象类不能使用new运算符创建对象,但仍可在抽象类中定义构造方法,可由派生类的构造方法调用;
        (7) final不能修饰抽象类;
        (8) private、static、final或native修饰抽象方法;
        (9) abstract 类中不能有private的数据成员或成员方法; 
        (10) 父类是非抽象类(即具体类),则其子类仍可是抽象类;
        (11) 虽然不能创建抽象类的对象,但抽象类可以当作数据类型使用,如作为方法形参类型、返回值类型、数组元素类型等等。


二、接口

        接口就是方法定义和常量值的集合。从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有方法的实现。 
        接口可以实现“多重继承”,且一个类可实现多个接口,正是这些机制使得接口提供了比多重继承更简单,更灵活,而且更强健的功能。


        声明接口:

[修饰符] interface 接口名[extends 父接口名列表]   { 
常量数据成员声明;
抽象方法声明;
                         }

        接口的声明注意一下几点:

        (1) interface:声明接口的关键字,可将接口看成一个特殊类;
        (2) 接口名要符合Java标识符命名规则;
        (3) 修饰符有两种:

            public 和默认。public修饰的接口是公共接口,可以被所有的类和接口使用;
            默认修饰符的接口只能被同一个包中的其它类和接口使用;
        (4) 父接口列表:接口也具有继承性。它将继承父接口的所有属性和方法。与类的继承不同一个接口可以有一个以上的父接口,它们之间用逗号分隔;
        (5) 常量数据成员声明:常量数据成员前可以有也可省略修饰符。
      修饰符是public static 和 final;接口中的数据成员都是用 final修饰的常量,写法如下:
              修饰符 数据成员类型 数据成员名=常量值
              或

              数据成员名 = 常量值
        例:

             public final static double PI=3.14159; // 等价于double PI=3.14159;
             int SUM=100;   // 等价于final static int SUM=100; 
        (6) 接口中没有自身的构造方法,所有成员方法都是抽象方法;在接口中只能给出这些抽象方法的方法名、返回值和参数列表,而不能定义方法体,即仅仅规定了一组信息交换、传输和处理的“接口”。格式如下:
             返回值类型 方法名(参数列表);


        接口的实现:

接口定义仅仅是实现某一特定功能的一组功能的对外接口和规范,而不能真正地实现这个功能,这个功能的真正实现是在“继承”这个接口的各个类中完成的,要由这些类来具体定义接口中各抽象方法的方法体。 


一个类只能继承一个父类,但是可实现多个接口。
类定义的完整格式如下:
       [<修饰符>] class <类名>[extends<父类名>] [implements<接口名1>,<接口名2>,……]{
            // 类定义体
        }

        在类中,用implements关键字就可以调用接口。一个类可以调用多个接口,这时,在implements后用逗号隔开多个接口的名字;如果实现某接口的类不是抽象类,则在类的定义体部分必须实现指定接口的所有抽象方法,即为所有抽象方法定义方法体,而且方法头部分应该与接口中的定义完全一致,即有完全相同的返回值和参数列表;如果实现某接口的类是抽象类,则它可以不实现该接口所有的方法;接口的抽象方法的访问限制符都己指定为public,所以类在实现方法时,必须显式地使用public修饰符,否则编译系统警告为缩小了接口中定义的方法的访问控制范围。 


        接口和抽象类的区别:

        Java中所有的类有共同的父类java.lang.Object,但接口没有共同的根。接口可以当作抽象类使用。它们的区别如下:
        (1)接口中的每个方法,没有实现部分,都是抽象方法;抽象类中可以有具体的方法。
        (2)接口中的数据必须是常量;抽象类可以有各种类型的数据。
        (3)由于定义在接口中的所有方法都是抽象方法,接口中可以省略abstract修饰符;但是抽象类中的抽象方法必须用abstract修饰。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值