一、抽象类
1、抽象:笼统、模糊、不具体的概念。
2、概念:使用了关键词abstract声明的类叫作”抽象类”。如果一个类里包含了一个或多个抽象方法,类就必须指定成abstract(抽象)。”抽象方法”,属于一种不完整的方法,只含有一个声明,没有方法主体。
格式:abstract 类名{ }
3、特点:
◆方法只有声明没有实现时,该方法就是抽象方法,需要被abstract修饰,抽象方法必须定义在抽象类中,也需要被abstract修饰。
◆抽象类不可以被实例化,因为被调用抽象方法没有意义。
◆抽象类有其子类覆盖了所有的抽象方法后,该子例才可以被实例化,否则,这个子例还是抽象类。
代码示例:
4、抽象类中的注意事项:
●抽象类有构造函数吗?
有,用于给子类对象进行初始化。
●抽象类可以不定义抽象方法吗?
可以的,但很少见,目的就是不让该类创建对象。AWT 的适配器对象就是这种类。
●抽象关键字不可以与什么关键字共存?
private、static、final三个不行。
●由abstract修饰的方法就是抽象方法,抽象方法没有方法体。
●抽象类不一定要包含抽象方法,若类中包含了抽象方法,则该类必须被定义为抽象类。
●如果一个子类没有实现抽象父类中所有的抽象方法,则子类也成为一个抽象类。
●构造方法、静态方法、私有方法、final方法不能被声明为抽象的方法。
5、抽象类与一般类的异同点?
◆相同:抽象类和一般类都用来描述事物,都在内部定义了成员。
◆不同:一般类有足够的的信息描述事物,抽象类描述事物的信息可能不足;一般类不能定义抽象方法,只能定义非抽象方法,而抽象类可以定义抽象方法,也可以定义非抽象方法;一般类可被实例化,抽象类不能被实例化。
6、抽象类一定是个父类吗?
不一定。
二、接口
1、接口的定义:
Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。两种含义:一,Java接口,Java语言中存在的结构,有特定的语法和结构;二,一个类所具有的方法的特征集合,是一种逻辑上的抽象。前者叫做”Java接口”,后者叫做”接口”。
从本质上讲,接口是一种特殊的抽象类,这种抽象类中只能包含常量和方法的定义,而没有变量和方法的实现。
格式:interface 接口名称{ }
2、接口的成员修饰符是固定的。
成员常量:public static final
成员函数:public abstract
3、接口注意事项:
发现接口中的成员都是public,接口的出现将“多继承”通过另一种形式体现出来,即多实现。
当一个抽象类中全是抽象方法时,这时将该抽象类用另一种形式,就是接口interface。
定义接口使用的关键字不是class,而是interface。
接口中的成员全部是公共权限。
类与类之间是继承关系,而类与接口之间是实现关系,接口与接口之间是继承关系。
接口不可以实例化,只能由实现了接口的子类并覆盖了接口中的所有抽象方法之后,该子类才可以被实例化,否则该子类仍为抽象类。
一个类可以实现多个接口,一个类继承另一个类的同时,还可以实现多个接口。
接口避免了单继承的局限性。
接口御姐控之间是继承关系,而且接口可以实现多继承。
4、接口特点:
接口是对外暴露的规则,是程序功能的扩展,降低耦合性,可以用多实现,类与接口实现关系。
5、接口的实现类:
与抽象类一样,接口要使用也必须通过子类,子类通过implements关键字实现接口
一个类可以实现多个接口,在implements子句中用逗号分开
非抽象子类必须实现接口中定义的所有方法
实现格式:
class 子类 implements接口A,接口B…{
}
6、接口的使用规则
接口中所有的方法都是public abstract。
在接口中声明方法时,不能使用static,final,synchronized,private,protected等修饰符。
一个接口可以继承自另一个接口。
java中不允许类的多继承,但允许接口的多继承。
接口中可以有数据成员,这些成员默认都是public static final
7、接口的用途
用处:
(1)通过接口实现不相关类的相同行为,而无需考虑这些类之间的关系.
(2)通过接口指明多个类需要实现的方法
(3)通过接口了解对象的交互界面,而无需了解对象所对应的类
四、多态
1、多态定义:
多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。◆从方法的角度来看:
重载(overloading):根据传入的参数不同,完成的功能也不同。
重写(override):子类根据需求重写父类中的方法。
◆从对象的角度来看:
对象的多态性主要分为两种:
向上转型: 子类对象->父类对象 (程序会自动完成)
格式:父类 父类对象=子类实例
向上转型后,因为操作的是父类对象,所以无法找到在子类中定义的新方法;但如果子类重写了父类的某个方法,则调用的是重写后的方法。
向下转型:父类对象->子类对象 (必须明确的指明要转型的子类类型)格式:子类 子类对象=(子类)父类实例
注意:向下转型前先要向上转型
◆instanceof关键字:
在java中可以使用instanceof关键字判断一个对象是否属于一个类的实例
格式:对象 instanceof 类 返回boolean类型
◆final关键字:
在JAVA中声明类、属性和方法时,可以使用关键字final来修饰。
注意:
1.final修饰变量(成员变量或局部变量),则成为常量,只能赋值一次
Final 类型 variableName;
修饰成员变量时,定义时同时给出初始值,而修饰局部变量时不做要求。
2.final修饰方法,则该方法不能被子类重写
final 返回值类型 methodName(paramList)
{

}
3. final修饰类,则类不能被继承
final class finalClassName{

}
2、对象的多态性:
一个对象对应着不同的类型。
3、多态在代码中的体现:
父类或接口的引用指向其子类的对象。
4、多态的好处:
提高了代码的可扩展性,前期定义的代码可以使用后期的内容。
5、多态的弊端:
前期定义的内容不能调用调用后期子类的特有内容。
6、多态的前提
(1)、必须有关系,继承、实现。
(2)、要有覆盖。
7、多态的转型
◆向上转型作用就是限制对特有功能访问
◆向下转型目的是为了使用子类中的特有方法
注意:
对于转型,自始至终都是子类对象在做着类型的变化
8、多态类型判断
1、Instanceof:用于判断对象具体类型,只能用于引用数据类型判断。
2、通常在向下转型前用于健壮性的判断。
9、多态的特点:
成员特点:
(1)、成员变量
编译时,参考引用型变量所属类中是否有调用的成员变量,有,编译通过,没有编译失败。
运行时,参考引用型变量所属的类中是否有调用的成员变量,并运行该所属类中的成员变量。
(简单说,编译和运行都参考等号左边)。
(2)、成员函数(重点)
编译时,参考引用型变量所属类中是否有调用的函数,有,编译通过,没有编译失败。
运行时,参考对象所属的类中是否有调用的函数。
(简单说,编译看等号左边,运行参考等号右边)。
(3)、静态函数
编译时,参考引用型变量所属类中是否有调用的静态函数(方法)。
运行时,参考对象所属的类中是否有调用的静态函数(方法)。
(简单说,编译和运行都参考等号左边)
其实对于静态方法,是不需要对象,直接用类名调用即可。
五、object类
1、定义:
Object类是所有Java类的根基类(“祖先类”),如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类。

2、toString()方法
Object类中定义有public String toString()方法,其返回值是String类型,描述当前对象的有关信息。
如果直接打印某对象的引用,则默认会调用这个对象的toString()方法,默认打印的内容中包含这个引用所指向的内存地址。
可以根据需要在用户自定义类中重写toString()方法。
3、equals()方法
Object类中定义有public boolean equals(Object obj) 方法,提供定义对象是否“相等”的逻辑。
Object的equals方法定义为:x.equals(y),当x和y指向同一个地址时返回true,否则返回false。
String类中已经重写了equals(Object obj)方法,重写后的方法比较的是两个字符串的”内容”是否一样(注意:==比较对象的引用)。
可以根据需要在用户自定义类型中重写equals方法。
五、基本数据类型的包装类
1、Java语言针对所有的基本数据类型都提供了对应的包装类。

基本数据类型转换为包装类

包装类转换成基本类型

2、自动装箱拆箱
JDK5.0中为基本数据类型提供了自动装箱(boxing)、拆箱(unboxing)功能:
装箱:将基本数据类型包装为对应的包装类对象
拆箱:将包装类对象转换成对应的基本数据类型

3、字符串相关类
1.String类
(1) String代表字符串类型,字符串的内容本身不可改变,字符串存储于“字符串常量池”中。
(2)String的两种实例化方式
a:直接赋值法:
eg: String str=“Hello World”;
b:通过new操作符实例化:
eg: String str=new String(“Hello World”);
(3)一个字符串就是一个String类的匿名对象。
所谓匿名对象,就是在堆内存中开辟了空间,但在栈内存中并没有引用指向的对象。
(4)字符串常用方法
4. StringBuffer类
(1)StringBuffer代表可变的字符序列。
StringBuffer称为字符串缓冲区,它的工作原理是:预先申请一块内存,存放字符序列,如果字符序列满了,会重新改变缓存区的大小,以容纳更多的字符序列。
(2)StringBuffer是可变对象,这个是与String最大的不同(如果连续操作String对象,则会产生大量的“垃圾”,而且“断开-连接”很频繁。)
5.StringBuilder类
StringBuilder和StringBuffer功能几乎是一样的,只是 StringBuilder是线程不安全的
六、内部类
1.在类的内部定义另一个类。如果在类Outer的内部再定义一个类Inner,此时Inner就称为内部类,而Outer则称为外部类。
2.内部类的定义格式

2.内部类在编译完成后也会产生.class文件,而文件名称则是” 外部类名称 内部类名称.class”3.使用内部类的原因:比如:心脏属于人类的某个部分:但心脏不能简单用属性或者方法表示一个心脏,因为心脏也有自己的属性和行为,所以需要写在人类的内部4.成员内部类成员内部类中不能定义static变量成员内部类持有外部类的引用在文件管理方面,成员内部类在编译完成后也会产生.class文件,而文件名称则是”外部类名称 内部类名称.class” 3.使用内部类的原因: 比如: 心脏属于人类的某个部分:但心脏不能简单用属性或者方法表示一个心脏,因为心脏也有自己的属性和行为,所以需要写在人类的内部 4.成员内部类 成员内部类中不能定义static变量 成员内部类持有外部类的引用 在文件管理方面,成员内部类在编译完成后也会产生.class文件,而文件名称则是”外部类名称内部类名称.class”
外部实例化成员内部类的格式:
外部类.内部类 内部类对象=外部类实例.new 内部类();
5.静态内部类
如果一个内部类使用static声明,则此内部类就称为静态内部类,其实也相当于外部类。可以通过外部类.内部类来访问。
静态内部类不会持有外部类的引用,创建时可以不用创建外部类对象
静态内部类可以访问外部的静态变量,如果访问外部类的非static成员变量必须通过外部类的实例访问
外部实例化静态内部类对象的格式:
外部类.内部类 内部类对象= new 外部类.内部类();
6.局域内部类
局域内部类是定义在一个方法中的内嵌类,所以类的作用范围仅限于该方法中,而类生成的对象也只能在该方法中使用。
局域内部类不能包含静态成员
特别注意:局域内部类要想访问包含其的方法中的参数,则方法中的参数前必须加上final关键字(JDK<=1.7)。
7.匿名内部类
如果一个内部类在整个操作中只使用一次的话,就可以定义为匿名内部类
没有名字的内部类,这是java为了方便我们编写程序而设计的一个机制,因为有时候有的内部类只需要创建一个它的对象就可以了,以后再不会用到这个类,这时候使用匿名内部类就比较合适。

java基础系列(四)相关推荐

  1. 跳槽者、应届生必看JAVA面试题系列 - JAVA基础知识(四)

    一: 前言 莫等闲,白了少年头,空悲切. 二: 面试挑战   在文章开始前,首先安利下"面试挑战": 凡是满足下面的挑战条件的,如果一个月内没有拿到一个Offer的,免费提供简历封 ...

  2. java中this_夯实Java基础系列7:一文读懂Java 代码块和执行顺序

    目录 #java中的构造方法 #构造方法简介 #构造方法实例 #例-1 #例-2 #java中的几种构造方法详解 #普通构造方法 #默认构造方法 #重载构造方法 #java子类构造方法调用父类构造方法 ...

  3. [转载] 夯实Java基础系列8:深入理解Java内部类及其实现原理

    参考链接: Java内部类 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tut ...

  4. java基础系列十七(时间日期转换)

    目录 一.概述 二.基础知识 2.1 时区 2.2 格林威治时间 2.3 时间戳 三.Date/Calendar/SimpleDateFormat 3.1 Date 3.2 Calendar 3.3 ...

  5. Java基础系列【导读】

    Java基础系列导读 Java基础 JaveWEB Java基础 基础系列[一]-- Java语言介绍 基础系列[二]-- 环境搭建 基础系列[三]-- Java基础语法 基础系列[四]-- 面向对象 ...

  6. 夯实Java基础系列15:Java注解简介和最佳实践

    Java注解简介 注解如同标签 Java 注解概述 什么是注解? 注解的用处 注解的原理 元注解 JDK里的注解 注解处理器实战 不同类型的注解 类注解 方法注解 参数注解 变量注解 Java注解相关 ...

  7. 夯实Java基础系列14:深入理解Java枚举类

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  8. 夯实Java基础系列18:深入理解Java内部类及其实现原理

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  9. 夯实Java基础系列6:一文搞懂抽象类和接口,从基础到面试题,揭秘其本质区别!

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  10. 夯实Java基础系列23:深入理解Java继承、封装、多态的底层实现原理

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

最新文章

  1. ASP中的工具类函数收集
  2. spring面试重点
  3. TFS 无法签入或自动签出 解决方法 【强制撤销签出无效】
  4. 3.1 Adapter(适配器)
  5. linux下socket编程-TCP
  6. CCNP学习笔记7-路由部分--OSPF综合题2
  7. matlab车辆测距,一种基于单目视觉的车辆测距方法
  8. 实现Ajax异步交互
  9. SpringCloud集成Dubbo实现RPC调用
  10. 历史上的今天:游戏机之父诞辰;搜索技术之父出生;MIT 公开演示旋风计算机...
  11. 海康威视硬盘录像机怎么连接萤石云
  12. 如何批量生成视频二维码
  13. python开源管理系统_基于Python开源框架Flask的地震信息网络运维管理系统实现
  14. 鸿蒙系统不可能有了,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可 !【手机吧】_百度贴吧...
  15. python注释快捷_python注释快捷键
  16. 「洛谷」P1196 银河英雄传说
  17. oracle 基本语句
  18. CENTOS linux kernel 内核编译
  19. 使用G.Projector 探索不同地图投影的效果
  20. vue 后台获取路由表,addRouters动态路由

热门文章

  1. REMOTE 红外遥控模块
  2. el-tree 解决setcurrentKey 节点定位问题
  3. GBK与GB2312 解决GBK转UTF-8部分字符乱码
  4. 电子元器件解析之电容(二)——电容分类与应用场景
  5. 使用JSP内置对象编写登录验证页面
  6. 哪位大虾知道斜杠,反斜械, 破折号 等的英文怎么拼写
  7. c++借助freeimage分割文件
  8. SC钢管人防套管如何选型
  9. 使用Fetch请求,如何下载二进制流格式的文件
  10. JDBC_刘锋的博客