| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> Java基础-抽象和接口 -> 正文阅读 |
|
[Java知识库]Java基础-抽象和接口 |
一、抽象类和抽象方法: 1、abstract关键字的使用 (1)abstract:抽象的 (2)abstract可以用来修饰的结构:类、方法 ? a、abstract修饰类:抽象类 ? ? ? ? 》此类不能是实例化? ? ? ? ? 〉抽象类中一定有构造器,便于子类实例化时调用(涉及:子类对象实例化的全过程) ? ? ? ??》开发中,都会提供抽象类的子类,让子类对象实例化,完成相关的操作? b、abstract修饰方法:抽象方法 ? ? ? ? 》抽象方法只有方法的声明,没有方法体 ? ? ? ? ?〉包含抽象方法的类一定是抽象类;反之,抽象类中可以没有抽象方法 ? ? ? ? 》若子类重写了父类中的所有抽象方法(直接父类和间接父类)后,此子类方可实例化;若子类没有重写父类中的所有抽象方法后,次子类也是一个抽象类,子类需要使用abstract修饰 如下,继承中,可以重写抽象方法中的方法,加上方法体;也可以在抽象类前面加上abstract,这两个方式来继承抽象方法. ?2、抽象的应用场景 抽象类是用来模型化那些父类无法确定全部实现,而是由其子类提供具体实现的对象的类:父类提供抽象方法,子类可以显示的去继承,重写抽象方法 ?3、abstract使用中的注意点 (1)abstract不能用来修饰:属性、构造器等结构 (2)abstract不能用来修饰私有方法、静态方法、final的方法、final的类 4、创建抽象类的匿名子类对象 ?? 二、接口:interface 1、接口的使用 (1)接口使用interface来定义 (2)java中,接口和类是并列的两个结构 (3)如何定义接口:定义接口中的成员 ? ? ? ? (3.1)JDK7及以前:只能定义全局敞亮和抽象方法 ? ? ? ? ? ? ? ? 》全局常量:public static final的,但是书写时可以省略不写 ?? ? ? ? ? ? ? ? 〉抽象方法:public abstract的 ? ? ? ? ? ? ? ????????(3.2)JDK8及以后:除了定义全局常量和抽象方法外,还可以定义静态方法、默认方法(略)???????? ? ? ? ? (3.3)接口中不能定义构造器,意味着接口不可以实例化? ? ? ? ? ?(3.4)java开发中,接口都是通过类去实现(implement)的方式来使用 ? ? ? ? ? ? ? ? 如果实现类覆盖了接口中的所有抽象方法,则此实现类就可以实例化 ? ? ? ? ? ? ? ? 如果实现类没有覆盖接口中的所有抽象方法,则此实现类仍然是一个抽象类 2、接口的多实现和接口的继承性: (1)可以实现多个接口弥补了java单继承的局限性 ? ? ? ? 格式:class AA extends BB implements CC,DD,EE (2)接口和接口之间叫做继承,并且可以多继承 ? 接口和类之间叫实现关系;类和类之间叫做继承关系 (3)接口的具体使用,体现多态性 (4)接口实际上可以看做是一种规范 eg:USB体现了一种规范;如下也体现了接口使用上的多态性 ?eg2: 面向接口编程 (5)、 创建接口匿名实现类的对象 ?3、接口的应用 (1)代理模式: eg: 4、java8中接口的新特性 除了定义全局常量和抽象方法外,还可以定义静态方法、默认方法(略)??? (1)接口中定义的静态方法,只能通过接口来调用 (2)通过实现类的对象可以调用接口中的静态方法?;如果实现类重写了接口的默认方法,调用时,仍然调用的是重写以后的方法? ?? eg: ?eg2:接口类中定义了method3,实现一个父类,也定义了method3,现在让其继承于父类的同时去实现接口 (3)结论:如果子类(或实现类)继承的父类和实现的接口中声明了同名同参数的方法,那么子类在没有重写此方法的情况下,默认调用的是父类中的同名同参数的方法.---》类优先原则 ? 结果: (4)如果实现类实现了多个接口,而这多个接口中定义了同名同参数的默认方法,那么在实现类没有重写此方法的情况下,会报错,这叫做接口冲突;那么就需要在实现类中重写此方法 eg:新增一个文件,下面没有父类,但是有多个接口,下面会报错 ? ?解决报错:在实现类中重写此方法 如果有父类也不会报错??? (5)如何在子类(实现类)的方法中调用父类、接口中被重写的方法 ?5、内部类的分类 (1)、java中允许将一个类A声明在另一个类B中,则类A就是内部类,类B称为外部类 (2)、内部类的分类:成员内部类(直接在类内定义一个类)?VS 局部内部类(方法类,代码块内,构造器内) ?? (3)成员内部类: ? ? ? ? 一方面,作为外部类的成员 ? ? ? ? ? ? ? ? 》调用外部内的结构 ? ? ? ? ? ? ? ? 〉可以被static修饰 ? ? ? ? ? ? ? ? 》可以被四种不同的权限修饰(private,protect,default,public) ? ? ? ? 另一方面,作为一个类 ? ? ? ? ? ? ? ? 》类内可以定义属性、方法、构造器 ? ? ? ? ? ? ? ? ?〉可以用final修饰,表示此类不可被继承,言外之意,不使用final就可以被继承 ? ? ? ? ? ? ? ? 》可以被abstract修饰 (4)关注一下3个问题 a、如何实例化成员内部类的对象 eg:在上面截图代码的基础上: b、如何在成员内部类中区分调用外部类的结构 ?c、 开发中局部内部类的使用 方式二:匿名内部类 :创建接口匿名实现类的匿名对象 (5)局部内部类使用注意点(安卓开发需要特别注意): ?a、局部内部类的方法(show())中,如果调用局部内部类所声明的方法(method())中的局部变量的话,要求此局部变量声明为final的.(在jdk8以上,默认加上了final,jdk7下会报错) ? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 16:43:26- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |