面向对象的抽象类与接口

一、抽象类

如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这样的类我们称它为抽象类。比如new Animal(),我们都知道这个是产生一个动物Animal对象,但是这个Animal具体长成什么样子我们并不知道,它没有一个具体动物的概念,所以他就是一个抽象类,需要一个具体的动物,如狗、猫来对它进行特定的描述,我们才知道它长成啥样。在面向对象领域由于抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能实例化的。

在使用抽象类时需要注意几点:

    1、抽象类不能被实例化,也就是不能new出来对象,实例化的工作应该交由它的子类来完成,它只需要有一个引用即可。

    2、抽象方法必须由子类来进行重写。

    3、只要包含一个抽象方法的抽象类,该方法必须要定义成抽象类,不管是否还包含有其他方法。

    4、抽象类中可以包含具体的方法,当然也可以不包含抽象方法,抽象类是包含了构造方法,这和接口不同。

    5、子类中的抽象方法不能与父类的抽象方法同名。

    6、abstract不能与final并列修饰同一个类。

    7、abstract 不能与private、static、final或native并列修饰同一个方法。

二、接口

接口(Interface),在Java编程语言中是一个抽象类型,是抽象方法的集合。接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。如果一个类只由抽象方法和全局常量组成,那么这种情况下不会将其定义为一个抽象类。只会定义为一个接口,所以接口严格的来讲属于一个特殊的类,而这个类里面只有抽象方法和全局常量,就连构造方法也没有

下面要注意的几点:
    1、和抽象类不用,接口只有抽象方法和全局常量,没有构造方法

    2、接口必须要有子类(如果不是抽象类),那么必须要覆写接口中的全部抽象方法,而且这些方法只能是public的

    3、子类可以使用implements关键字实现多个接口。若既要继承抽象类,同时还要实现接口的话,使用一下语法格式:
             class 子类 [extends 父类] [implemetns 接口1,接口2,...] {}

    4、对于接口的格式要求如下:
        [权限修饰符] interface 接口名(extends 父接口1,父接口2......){
            -常量定义    //总是默认加上public static final
            -方法定义    //总是默认加上public abstract
        }

    5、接口不能创建实例,但是可以用来申明变量类型

下面就通过一些例子来解释上面的这些要求:

public class Test_abstract_interface {

}

interface jiekouA{
    /*默认加上 public static final*/int a = 10;
    /*默认加上 public abstract*/void aaa();
}

interface jiekouB{
    void bbb();
}

interface jiekouC extends jiekouA,jiekouB{
    void ccc();
}

class Test01 extends Test_abstract_interface implements jiekouC{
    //注意到下面会把重写所有的抽象方法
    int b ;
    public void aaa() {

    }

    public void bbb() {

    }

    public void ccc() {

    }

}
public static void main(String[] args) {
    /*jiekouA s = new jiekouA()-->这个是错误的调用方法,它只能new出子类*/
    jiekouA s = new Test01(); //接口可以作为申明的变量
    /*s.b = 10;*-->这个不行的,因为申明的是jiekouA,它只认识jiekouA中的属性方法,并不能调用Test01中变量,
                   这和多态一样*/
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值