`

类,接口,抽象类

阅读更多

                                                类、接口、抽象类

 接口和抽象类可以看成一种特-殊的类但它们都需要类来实现,且不能创建对象,它们都丰富了类的继承;

一.类:    类与接口和抽象类的最大不同是可以通过构造函数创建对象。且用子类的构造函数创建对象时

 

               父类的无参构造函数优先被掉用了,所以子类创建的对象能继承父类中的方法。    

   

二.接口:1.声明一个接口 public interface 接口名{  }
               2.接口中只能定义常量public final static 数据类型 常量名 (final说明是不能改变的,static说明该

                  常量在内存中只有一份,并且能够通过接口名.常量名直接调用不需要通过对象来调用它们)和

                  抽象方法 public 返回类型 函数名(数据类型 参数名,...);(注意是以分号结束,并且没有{}

                  号,接口中的方法默认都是Public型的。
              3.接口要靠类来实现 public class 类名 implements 接口名,...{  } (可以把接口看做是实现类的

                 父类,并且一个类可以实现(继承)多个接口),在实现接口的类中必须要把接口和接口的父类中的

                  所有方法都实现。在实现类中我们就可以通过自动转型来创建一个接口型的对象:

                 接口名 对象 = new 类名(),但这个对象不能调用类中的函数,只能调用接口中的函数,这和

                  类之间的自动转型一样,子类转化为父类后不能调用子类中定义的方法。
               4.接口也可以继承接口,并且一个接口可以继承多个接口 public class 类名 extends  接口名,...{ }

               5.如果一个类要同时继承一个类和接口,这必须先继承类再继承接口 public class 类名 extends

                  类名 implements 接口名 (个人猜想可能父类中可能会实现了接口中的某个方法,若先继承接口

                  则父类中的那个方法会被重写,这纯属我的猜测微笑

               6.接口中的方法都是抽象方法,因此可以省略abstract.
三.抽象类:1.声明一个抽象类 public abstract class 类名{   }

                   2.抽象类是介于接口和类之间的定义,它可以实现接口的所有功能。它能定义所有类和接口中的
                     内容(构造函数除外),但它申明抽象函数时和接口有点不同,他需要在函数前加上abstract,

                     public abstract 返回类型 函数名();

                   3.抽象类可以继承类和接口,也可以被类继承(一个类只能继承一个抽象类这和接口的

                      implements不同)

                    4.一个继承了接口类的抽象函数,接口中的的函数可以在抽象类中实现,也可以放到抽象类的子

                      类中实现。

                    5.我们会发现接口中定义了很多方法,但通常我们只需要用到其中的某个方法,如果我们直接

                       继承这个接口,其他方法也必须写一遍,写成一个空方法,说一我们可以弄一个抽象类实现

                      口中的所有方法(空方法),这样我们的子类就只要重写需要用到的方法。

总结:

接口和抽象类都不能实例化对象。

接口的优点:接口可以被多继承;设计和实现完全分离;更自然的是用多态;更容易搭建程序框架;更容易更换实现;
接口的理解:接口是一种约定,一个类实现一个接口就必须实现该接口中的所有抽象方法,这些方法可以看成是一个约定;

                    有些接口只有一个名字,里面什么都没有,这样的接口叫做标记接口
                     接口与其实现类的关系是ia-like-a
                    继承中父类与子类体现的关系式is-a

因为接口可以进行多重继承:

优点:对象可以调用多个基类中的接口。多种功能,加快任务实现。

缺点:易产生二义性和钻石型继承问题。多重性格,易得精神分裂。

 


         以上如果有错误的地方希望大家指出!! 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics