1.访问控制(笔试题)
1.1 常用的访问控制符
public - 公有的
protected - 保护的
啥也不写 - 默认的
private - 私有的
1.2 访问控制符的比较
访问控制符 访问权限 本类 本包中的类 子类 其他包的类
---------------------------------------------------------------------------
public 公有的 ok ok ok ok
protected 保护的 ok ok ok no
啥也不写 默认的 ok ok no no
private 私有的 ok no no no
要求大家掌握的内容:
a.public修饰的内容表示可以在任意位置使用;
b.private修饰的内容只能在本类内部使用;
c.通常情况下,成员变量都用private修饰,成员方法都用public修饰;
1.3 包的定义
package 包名;
package 包名1.包名2...包名n;
定义包的主要目的就是为了便于文件的管理以及区分同名的文件。
2.final关键字(重点)
2.1 基本概念
final本意为"最终的,不可更改的",该关键字可以修饰类、成员方法以及成员变量。
2.2 使用方式
final关键字修饰类体现在不能被继承;
- 为了防止滥用继承,如:String类、System类等。
final关键字修饰成员方法体现在不能被重写;
- 为了防止不经意间造成方法的重写,如:SimpleDateFormat类中的format()方法。
final关键字修饰成员变量体现在该成员变量必须初始化而且不能更改;
- 为了防止不经意间造成数值的改变,如:Thread.MAX_PRIORITY等
扩展:
在以后的编程中单独使用static或final关键字修饰变量的场合很少,通常都是使用public static final共同修饰该变量来表达常量的含义,常量的命名规则是:所有字母都大写,不同单词之间采用下划线连接。
如:
public static final double PI = 3.14;
3.对象创建的过程(了解)
3.1 单个对象创建的执行过程
(1)当创建对象时会在堆区中申请内存空间,采用默认初始化的方式来处理成员变量;
(2)采用显式初始化来进行成员变量的处理;
(3)执行构造块中的代码,可以给成员变量再次赋值;
(4)执行构造方法体中的代码,此时对象构造完毕;
3.2 子类对象创建的执行过程
(1)当创建子类对象时会在堆区中申请内存空间;
(2)先加载父类再加载子类,因此先执行父类的静态语句块,再执行子类的静态语句块;
(3)先执行父类的构造块,再执行父类的构造方法体,此时父类部分构造完毕;
(4)先执行子类的构造块,再执行子类的构造方法体,此时子类对象构造完毕;
4.多态(重中之重)
4.1 基本概念
多态主要指同一种事物表现出来的多种形态。
饮料:可乐、雪碧、加多宝、乐虎、红牛、... ...
宠物:猫、狗、鸟、鱼、小强、...
整数:byte b = 10; short s = 10; int i = 10; ...
... ...
4.2 语法格式
父类类型 引用变量名 = new 子类类型();
如:
Pet pc = new Cat();
pc.show();
解析:
在编译阶段调用Pet类中的show()方法,在运行阶段调用Cat类中重写以后的show()方法。
4.3 注意事项
(1)使用父类的引用指向子类的对象时,父类的引用可以直接调用父类中的成员方法;
(2)使用父类的引用指向子类的对象时,父类的引用不可以直接调用子类中的成员方法;
(3)对于非静态的成员方法来说,编译阶段调用父类版本,运行阶段调用子类版本;
(4)对于静态的成员方法来说,编译和运行阶段调用父类版本,与对象无关;
4.4 引用数据类型之间的转换
(1)引用数据类型之间的转换分为两种:自动类型转换 和 强制类型转换;
其中子类类型向父类类型的转换发生自动类型转换;
其中父类类型向子类类型的转换需要强制类型转换;
(2)引用数据类型之间的转换必须发生在父子类之间,否则编译报错;
(3)当转换的子类类型并不是该引用真正指向的子类类型时,编译阶段通过,运行阶段
发生类型转换异常;
(4)为了避免上述错误的发生,建议每次强制类型转换之前使用以下格式进行判断:
if(引用变量名 instanceof 目标类型){}
- 判断引用变量名真正指向的对象是否为目标类型,若是则返回true,否则返回false
4.5 多态的实际意义
多态的实际意义在于屏蔽不同子类的差异性实现通用的编程,从而带来不同的结果。