java基础-Java 接口与抽象类(第十三节)

​       java里面还有2个东西非常重要,一个是接口,一个是抽象类,但是前期不要有压力,你只要能理解,会简单使用就好,等你做项目的时候,遇到问题,需要通过这2个知识点去解决的时候,你就一下明白了。      

一、java接口

我们先看下接口长啥样;接口跟类有点相似但是还是不一样的,类是用class表示,而接口是用interface表示;并且,接口里面的方法只是简单定义了犯法名,返回值,参数情况,并没有具体实现方法体,就是说方法里面没有实现内容,咋实现也不知道;

 

java基础-Java 接口与抽象类(第十三节)

 

接口特性

  • 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。

  • 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。

  • 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。

 

那么问题来了,这玩意有啥用啊,方法都不实现,就简单列举了一下要实现哪些方法而已;其实接口用处还真的是大;

(1)java类是单继承的,跟c++不一样,C++可以多继承,java不行,也就是说java一个类只能继承一个父类,你家儿子只能继承你,不能继承隔壁老王,就这个理,万一发现继承了隔壁老王,那就没你事了java基础-Java 接口与抽象类(第十三节);而一个类却可以实现多个接口,类跟接口是实现关键不是继承,这个理解一下;

      这个也好理解,比如,你儿子可以被你和隔壁老王一起供养,但是继承只能继承你,就这么个理;类可以实现多个接口,也就意味着,他可以把公共方法归类化,比如,你以后开了一家家具店,你的家具木材来自于A公司,螺丝,胶水什么的来自于B公司,组装人员来自于C公司;那单单继承一家公司,有用吗??肯定不行啊,这个时候你就需要同时跟这3家公司合作,实现组合这3家公司的功能;

(2)接口有利于代码的规范:对于一个大型项目而言,架构师往往会对一些主要的接口来进行定义,或者清理一些没有必要的接口。这样做的目的一方面是为了给开发人员一个清晰的指示,告诉他们哪些业务需要实现;同时也能防止由于开发人员随意命名而导致的命名不清晰和代码混乱,影响开发效率。

 

下面我举个栗子:

     

java基础-Java 接口与抽象类(第十三节)

(1)单继承

java基础-Java 接口与抽象类(第十三节)

java基础-Java 接口与抽象类(第十三节)

(2)多继承

java基础-Java 接口与抽象类(第十三节)

java基础-Java 接口与抽象类(第十三节)

 

二、java抽象类

     在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

       抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。

       由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。

java基础-Java 接口与抽象类(第十三节)

      抽象类的概念可能不太好理解,我们举个栗子:

java基础-Java 接口与抽象类(第十三节)

      你现在都30岁了,还是没有女朋友,你爸妈肯定要催你找女朋友了吧,但是由于你单身几十年的经验来看,根本不知道要找什么样的女朋友,这个时候的女朋友就相当于一个抽象类了,但是你又知道这个女朋友要能生孩子,五官要齐全,这个就相当于抽象类里面的普通变量和普通方法了,然后你又不知道你要找的女朋友是性格才适合你,这个时候你就等于是知道要考虑性格,但是不知道到底要啥性格的,这个就相当于抽象类的抽象方法,先定义再说,后面怎么实现,到时候再看。你也一样,先找个女朋友,至于性格,那就只能日后再说java基础-Java 接口与抽象类(第十三节);时间久了,到时候就知道该怎么选择了。对吧,渣男一般都这样认为;

 

       好了,抽象类的定义比较简单,使用也是一样,往下看代码:

 

java基础-Java 接口与抽象类(第十三节)

    注意一个问题,我们定义抽象类Test01的时候其实是定义了2个方法的,一个是普通的add()方法,一个是抽象方法delete(),为什么TestData继承了Test01这个抽象类的时候,没有出现add()这个方法???

    这里说明下:继承了抽象类的类,必须重写抽象类里面的抽象方法,当然不是说,非要你在里面写代码进去,这个必须重写的意思是在继承的类里面需要出现这个方法,但是抽象类的普通方法,是可重写,可不重写的。明白了吧;