Java抽象类、接口、内部类
抽象类的概念:
1、Java中可以定义没有方法体的方法,还方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的类就是抽象类;
2、如,shape类计算周长和面积的方法无法确定,那么就可以将这样的方法声明为抽象的,以便在具体的子类中实现
抽象类的特征:
抽象方法的声明
修饰符abstract 返回值类型 方法名([参数列表]);
注意:因为抽象方法无法确定具体执行的功能,所以抽象方法没有方法体,需要在小括号后加上分号
抽象类的声明
语法:修饰符 abstract class 类名 extends 父类名
抽象类和普通类除了使用abstract修饰外和普通的类相似;
抽象类中可以没有抽象方法;但是一旦某个有抽象方法,那么这个类必须被声明为抽象类
static final private不能和abstract共存
抽象类的使用:
因为抽象类不是一个具体的类,所以无法实例化,但是抽象类可以用于声明变量;
抽象类可以被继承,在子类中实现所有抽象类的所有抽象方法,以达到抽象类的具体化;
注意:因为抽象方法无法确定具体执行的功能,所有抽象方法没有方法体,需要在小括号后加上分号;
抽象方法:不允许包含方法体;子类中需要重写父类的抽象方法,否则,子类也是抽象类
格式:public abstract void eat();
接口:在Java中接口不仅仅是程序开发过程中“约定”,更是更加抽象化的抽象类
无法归纳到一个类的但某些特征相同
语法:修饰符 interface 接口名{[常量];[抽象方法];}
接口中抽象方法可以不写abstract关键字,访问修饰符默认public
当类实现接口时,需要去实现接口中的所有抽象方法,否则需要将该类设置为抽象类;
接口中可以包含常量,默认public static final
接口也可以实现继承,并且可以继承多个父接口
default:默认方法 可以带方法体 jdk1.8后新增;可以在实现类中重写,并且可以通过接口的引用调用
static:静态方法 可以带方法体 jdk1.8后新增;不可以在实现类中重写,可以通过接口名调用
接口实现的语法:修饰符 class类名 extends 父类名 implements 接口1,接口2,...{类体部分}
一个类可以实现多个接口,从而解决了Java单继承的缺点
接口之间的继承:在Java中类之间的继承关系是单继承,也就是说一个类有且只能有一个父类
而Java中的接口实现了多继承,也就是说一个接口可以有多个父接口
接口的作用:提高程序的重用性;提高程序的可扩展性;降低程序的耦合度;实现了多继承
内部类
什么是内部类? 在Java中,可以将类定义在另一个类里面或者一个方法里面,这样的类称为内部类
内部类分类:
成员内部类:将一个类定义在另一个类的成员位置;
获取内部类对象实例,方式1:new外部类.new 内部类
方式2:外部类对象.new 内部类
方式3:外部类对象.获取方法
1、内部类在外部使用时,无法直接实例化,需要借由外部类信息才能完成实例化;
2、内部类的访问修饰符,可以任意,但是访问范围会受到影响;
3、内部类可以直接访问外部类的成员;如果出现同名属性。优先访问内部类中定义的;
4、可以使用外部类.this成员的方式,访问外部类中同名的信息;
5、外部类访问内部类信息,需要通过内部类实例,无法直接访问;
6、内部类编译后.class文件命名:外部类$内部类.class;
7、内部类中是否可以包含与外部类相同方法签名的方法
局部内部类:将一个类定义在另一个类的方法体中或者代码块中;
1、定义在方法内部,作用范围也在范围内
2、和方法内部成员使用规则以用,class前面不可以添加public、private、protected、static
3、类中不能包含静态成员
4、类中可以包含final,abstract修饰的成员
静态内部类:将一个类定义在另一个类的成员位置,并且static修饰符;
1、静态内部类中,只能直接访问外部类的静态成员,如果需要调用非静态成员,可以通过对象实例
2、静态内部类对象实例时,可以不依赖于外部类对象
3、可以通过外部类.内部类.静态成员的方式,访问内部类中的静态成员
4、当内部类属性与外部类属性同名时,默认调用内部类中的成员;如果需要访问外部类中的静态属性,则可以通过外部类.属性的方式;如果需要访问外部类中的非静态属性,则可以通过new外部类().属性的方式
匿名内部类:匿名内部类没有名字
1、匿名内部类没有类型名称、实例对象名称
2、编译后的文件命名:外部类$数字.class
3、无法使用private、public、protected、abstract、static修饰
4、无法编写构造方法,可以添加构造代码块
5、不能出现静态成员
6、匿名内部类可以实现接口也可以继承父类,但是不能兼得
Java抽象类、接口、内部类的更多相关文章
- Java入门教程十(抽象类接口内部类匿名类)
抽象类(abstract) 一个类只定义了一个为所有子类共享的一般形式,至于细节则交给每一个子类去实现,这种类没有任何具体的实例,只具有一些抽象的概念,那么这样的类称为抽象类. 在面向对象领域,抽象类 ...
- Java抽象类接口、内部类题库
一. 选择题 1. Person类和Test类的代码如下所示,则代码中的错误语句是( C ).(选择一项) public class Person { public String nam ...
- Java抽象类和内部类
类(class) 类是相似对象中共同属性和方法的集合体 在面向对象中定义类,就是在描述事物,就是在定义属性(变量)和行为(方法).属性和行为共同成为类中的成员(成员变量和成员方法). 封装.继承和多态 ...
- java 抽象类&接口
1,抽象类中有构造函数吗? 有,用于给子类对象进行初始化. 2,抽象关键字不可以和那些关键字共存? private 不行 static 不行 final 不行 final关键字: 1,fina ...
- java抽象类,接口(接口定义,实现接口,instanceof运算符,对象转换)
抽象类 在面向对象的概念中,所有的对象都是通过类来表述的,但并不是所有的类都能够完整的描绘对象,如果一个类中没有包含足够的信息来描绘一类具体的对象,这样的类就是抽象类.抽象类往往用来表征对问题领域进行 ...
- java - day008 - 接口,内部类
接口 作用: 结构设计工具,用来解耦合,需要有子类,隔离具体实现 接口是一个极端的抽象类 用 interface 代替 class 用 implements 代替 extends // 接口中所有东西 ...
- java 抽象类 接口 区别
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 接口 里面 都是抽象方法. 接口里面的 字段 都是 public static fina ...
- 【Java】对象、类(抽象类与内部类)、接口
博文内容概况 对象和类 抽象类 接口 内部类 对象和类 对象是对客观事物的抽象,类是对对象的抽象.类是一种数据类型,其外观和行为由用户定义.类中可以设置两种类型的元素:字段(有时被称为数据成员)和方法 ...
- Java语言简介、基础组成、封装、继承、多态、抽象类、内部类、接口
目录 Java简介 Java语言基础组成 面向对象 对象 封装 构造函数 this关键字 static(静态关键字) 主函数 静态什么时候用呢? 面向对象(数组工具对象建立) 设计模式 继承 成员变量 ...
随机推荐
- BootstrapVue 安装指南
BootstrapVue 是基于 Bootstrap v4 + Vue.js 的前端 UI 框架.BootstrapVue 作为学习 Vue.js 框架本身的入门框架,我认为是非常不错的.Bootst ...
- 经典面试题golang实现方式(一)
以下所有题目的关键信息都会用[]括起来,我们不对题目进行分析,只给出题目的解决方案:如有疑问请不吝赐教. 题目: 请实现一个算法,确定一个字符串的所有字符[是否全都不同].这里我们要求[不允许使用额外 ...
- 从一道ctf看php反序列化漏洞的应用场景
目录 0x00 first 前几天joomla爆出个反序列化漏洞,原因是因为对序列化后的字符进行过滤,导致用户可控字符溢出,从而控制序列化内容,配合对象注入导致RCE.刚好今天刷CTF题时遇到了一个类 ...
- [Vijos] 遭遇战
背景 你知道吗,SQ Class的人都很喜欢打CS.(不知道CS是什么的人不用参加这次比赛). 描述 今天,他们在打一张叫DUSTII的地图,万恶的恐怖分子要炸掉藏在A区的SQC论坛服务器!我们SQC ...
- std::shared_future/future
std::future提供了一种访问异步操作结果的机制.
- 3.1 C语言_实现AVL平衡二叉树
[序] 上节我们实现了数据结构中最简单的Vector,那么来到第三章,我们需要实现一个Set set的特点是 内部有序且有唯一元素值:同时各种操作的期望操作时间复杂度在O(n·logn): 那么标准的 ...
- MySQL 分页查询优化——延迟关联优化
目录 1. InnoDB表的索引的几个概念 2. 覆盖索引和回表 3. 分页查询 4. 延迟关联优化 写在前面 下面的介绍均是在选用MySQL数据库和Innodb引擎的基础开展.我们先 ...
- ESP8266开发之旅 网络篇⑫ 域名服务——ESP8266mDNS库
1. 前言 前面的博文中,无论是作为client端还是server端,它们之间的通信都是通过具体的IP地址来寻址.通过IP地址来寻址,本身就是一个弊端,用户怎么会去记住这些魔法数字呢?那么有没 ...
- Ubuntu 16.04下配置 Nginx 与 Node.js 以及服务的部署
第一步:安装nginx sudo apt-get update sudo apt-get install nginx 如果遇到依赖问题,尝试执行sudo apt-get -f install命令 第二 ...
- web前端面试题(含答案)
HTML+CSS1.对WEB标准以及W3C的理解与认识标签闭合.标签小写.不乱嵌套.提高搜索机器人搜索几率.使用外 链css和js脚本.结构行为表现的分离.文件下载与页面速度更快.内容能被更多的用户所 ...