抽象类与接口

抽象类:

        父类某些方法需要声明,但又不确定如何实现,可将其声明抽象方法,
    【抽象类主要是为了防止创建父类对象】
    抽象类与抽象方法
        抽象方法没有方法体
        类中有抽象方法,类必须声明为抽象类
        一般来说,抽象类会被继承,其子类实现抽象方法
        抽象类在框架与设计模式用的多
    注意:【面试】
        1 抽象类不能创建对象/不能被实例化
        2 抽象类可以没有抽象方法,抽象类还是类
        3 抽象方法必须在抽象类中,抽象方法不能有方法体
        3 abstract只能修饰类与方法,不能修饰属性或其他
        4 继承抽象类,其子类必须实现所有抽象方法,否则其也要是抽象类了
        5 【抽象方法/抽象类 不能被private,final,static修饰,因为这些关键字与是与重写违背的】

接口:

        interface 接口名{
        属性
        方法
    }
    jdk7之前接口中所有方法都没有方法体,都是抽象方法
    jdk7及之后接口可以有静态方法,默认方法(default) (实现后的方法)
    
    1 接口中抽象方法可以省略abstract
    2 实现一个接口必须重写所有抽象方法
    3 抽象类只能单继承,但是不重写还有此方法
    4 接口多实现,实现一个接口必须重写所有抽象方法
    
    抽象类与接口 像是  代码块与构造方法
    【抽象类主要是为了防止创建父类对象】
    【接口主要是为了规范,还是多实现的,没有限制】
    【实现与继承一样,子类也可以用父类的所有东西】
    
    应用:
        编写3个类,分别完成对数据库mysql,Oracle,db2的连接 里面的方法名不一样
        调用时非常麻烦
        用接口规范其方法名就行
        【接口主要是为了规范,还是多实现的,没有限制】
        
    注意:
        1 接口不能被实例化
        2 接口中所有方法都是public的?【不对的,default】,抽象方法可以不用abstract修饰(证明不能是默认,可以看子类实现的方法,子类实现方法是默认会报错)
        3 类实现接口要实现所有抽象方法
        4 抽象类实现接口,可以不实现所有抽象方法
        5 一个类可实现多接口(方法重名无所谓,反正我实现一个就行)(方法调用继承优先于接口实现)
        6 接口的属性只能是public static fianl的,而且必须要初始化(public static fianl写法上可省略) 接口名.属性名访问
            证明:static:接口名称直接点属性就能用   final 不能再次赋值        protected/private直接报错,默认用不同包访问证明
        7 接口不能继承类,但可以【继承】多接口
        8 接口修饰符只能是public或默认,与类一样
        9 接口中可以没有抽象方法
    【理解】继承与实现区别    【实现这种机制是对于Java单继承机制的一种补充】
        老猴子与小猴子是继承关系
        小猴子想要飞翔,就要实现/学习鸟的功能        
        小猴子想要游泳,就要实现/学习鱼的功能
        只要继承了类,自然就会使用父类方法(即使不重写)(很自然的行为)(猴子会爬树,小猴子会爬树)【父亲】
        实现是要重写接口方法的(有一个学习的过程)                                                    【师傅】
        【继承主要是解决代码复用性与可维护性问题】  【严谨,需要is-a】
        【接口主要是解决 设计规范问题】                【灵活,like-a就行】    【接口一定程度上解耦:接口规范性+动态绑定机制】
                                                                                (集合的源码常用)
                                                                                
    接口的多态特性:
        1 接口类型可以指向 实现类的对象  向上转型
        2 多态参数   向上转型
        3 多态数组     接口数组    调用特有要向下转型
        【4 多态传递特性】
            接口可以继承接口,继承后,本接口实现类不仅仅可以向上转型为直接实现的接口,还可以向上转型为父接口
            
        类继承类同时实现接口
            调用的变量在继承的类与接口中都有,会报错(区分:继承类的变量用super,接口的变量用接口名点)this用本类,没有用局部变量

你可能感兴趣的:(java,开发语言)