A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

qqq12356

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© qqq12356 初级黑马   /  2018-6-16 18:53  /  863 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

接口就是多个类的公共规范  (重点一定要会)
    接口是一种引用数据类型,最重要的内容就是其中的:抽象方法
   
                                                                                                                                接口格式:
    public interface 接口名称{
                //接口内容
        }       
    备注:换成了关键字interface之后,编译生成的字节码文件仍然是.java-->class.
       
        接口包含:
        jdk7包含:
        1.常量值  (重点要记会考)
        [public] [static] [final]  数据类型 常量名(全部大写)=数据值;
        只要被final修饰,就不能改变
       
        备注:
        一旦使用final关键字进行修饰,说明不可改变。
       
        注意事项:
       
        2 常量名全部大写字母,如果是多个单词中间用下划线_
        3 常量必须赋值

       
        2.抽象方法(重点要记会面试)
        在任何版本的java中,接口都能定义抽象方法::
        格式:
        [public] [abstract]  返回值类型  方法名称(参数列表);       
        注意事项:
        1.接口当中的抽象方法,修饰符必须是两个固定的关键字:public abstract
        2.这两个关键字修饰符,可以省略
        3.方法的三要素,可以随意定义
       
       
***                                                                      接口使用步骤
        1.接口不能直接使用,必须有一个“实现类”来“实现”该接口。
        格式:
        public class 实现类名称 implements 接口名称{
        实现接口当中所有抽象方法
        }

        2.接口的实现类必须覆盖重写(实现)接口中所有的抽象方法。
        实现:去掉abstract关键字,加上方法体大括号。
        3.创建实现类的对象,进行使用。
    注意事项:
        如果实现类没有覆盖重写接口中所有的抽象方法,那么这个实现类自己就必须是抽象类
        4.对象名.方法
       
        jdk8包含:
        3.默认方法(了解)
        格式:
        public default 返回值类型 方法名称(参数列表){
                方法体
        }
       
        备注:接口当中的默认方法,可以解决接口升级的问题。
       
        注意事项:
        1.接口的默认方法,可以通过接口实现类对象,直接调用。
        2.接口的默认方法,也可以被接口实现类进行覆盖重写。
       
        4.静态方法
        格式:
        public static 返回值类型 方法名称 (参数列表){
                方法体
        }
        提示:就是将abstroact或者defoult换成sitaic 即可,带上方法体。
       
        **注意:不能通过接口实现类的对象来调用接口当中的静态方法。
        正确用法:通过接口名称,直接调用其中的静态方法。
       
        格式:
        接口名称.静态方法名(参数);
       
       
       
        jdk9包含:
        5.私有方法
       
    问题描述:
        我们需要抽取一个共有方法,用来解决两个默认方法直接重复代码的问题
        但是这个共有方法不应该让实现类使用,应该是私有化的
       
        解决方案:
        从java9开始,接口当中允许定义私有方法。
        1.普通私有方法,解决多个默认方法之间重复代码问题
        格式:
        private 方回值类型  方法名称(参数列表){
                方法体
        }
       
        2.静态私有方法,解决多个静态方法之间重复代码问题
        格式:private static 方回值类型  方法名称(参数列表){
                方法体
        }
       
       
         
                                                          使用接口的时候,需要注意:
(重要)        1.接口是没有静态代码块或者构造方法的
(重要)        2.一个类的直接父类是唯一的,但是一个类可以同时实现多个接口
        格式:
        public class MyIntrtfaceImoL implements MyIntrtfaceA MyIntrtfaceB{
                //覆盖重写所有抽象方法
        }
       
(重要)        3.如果实现类所实现的多个接口当中,存在重复的抽象方法,那么直需要覆盖重写一次
(重要)        4.如果实现类没有覆盖重写所有接口当中的所有抽象方法,那么实现类就必须是一个抽象类
(了解)        5.如果实现类所实现的多个接口当中,存在重复的默认方法,那么实现类一定要对冲突的默认方法进行覆盖重写。
(了解)        6.一个类如果直接父类当中的方法,和接口当中的默认方法产生了冲突,优先用父类当中的方法。
       
       
       
        接口之间的多继承
(重要)        1.类于类之间是单继承的,直接父类只有一个。
(重要)        2.类于接口之间是多实现的,一个类可以实现多个接口
(了解)        3.接口于接口之间是多继承的
       
        接口
        ----->多继承 接口多实现
        ----->多实现 抽象类
        ----->单继承 类
             
                 接口
(重要)                 ----->多实现 类
       
        注意事项:
        1.多个父接口当中的抽象方法如果重复,没关系,
        2.多个父接口当中默认方法如果重复,那么子接口必须进行默认方法的覆盖重写(而且带着default关键字)
       
       
       
***                                                                                                                        多态  前提是继承或实现
       
        代码当中体现多态性,其中就是一句话,父类引用指向子类对象
        格式:
        父类名称 对象名=new 子类名称()
        接口名称 对象名 =new 实现类名称()
       
        访问成员变量的两种方式:
1.直接通过对象名称访问成员变量:看等号左边是谁,优先用谁,没有则向上找。
2.间接通过成员方法访问成员变量:看该方法属于谁,优先用谁,没有则向上找       
       
        使用多态的好处:
        无论右边new的时候换成那个子类对象,等号左边调用方法都不会变化
        通过父类引用指向子类对象
        明确关系 父子关系
       
        缺点:
        没有办法使用子类特有的成员
       
        成员变量:编译看左,运行看右
        成员方法:编译看左,运行看左
       
        对象的向上转型
        格式:
        父类名称 对象名=new 子类名称();
        对照着:自动类型转换  从小到大(从子类到父类)
        弊端:对象一旦向上转为父类,那么就无法调用子类原本特有的内容。
       
        解决方案:用对象的向下转型【还原】
       
        对象的向下转型
        是一个还原的动作
        格式:子类名称 对象名=(子类名称)父类对象;
       
       
        instanceof
        关键字意思:这个对象是这个类型吗?
        格式:
        对象名 instanceof 类型

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马