一、final
1.final的含义
(1)final是java中的一个关键字。
(2)final表示最终的,不可变的。
(3)final可以修饰变量以及方法和类等。
(4)final修饰的类无法继承;
修饰的方法无法被覆盖,被重写;
修饰的局部变量,只能赋一次值,
修饰的引用只能指向1个对象,并且只能永远指向该对象,直到该方法结束前该对象不会被垃圾回收器回收;
修饰的实例变量,系统不默认赋值,需要程序员手动赋值,这个手动赋值,在变量后面赋值可以,在构造方法中赋值也是可以的。
static final联合修饰的变量被称为“常量”,常量名建议全部大写,每个单词之间采用下划线衔接
二、抽象类和接口以及它们的区别
1.抽象类
(1)什么是抽象类
类和类之间有共同特征,将这些共同特征提取出来,形成的就是抽象类;类到对象是实例化,对象到类是抽象;类本身是不存在的,所以抽象类无法创建对象(无法实例化)。
(2)抽象类属于什么类型
抽象类也属于引用数据类型
(3)抽象类怎么定义
语法:
[修饰符列表] abstract class 类名{
类体;
}
(4)抽象类是无法实例化的,无法创建对象的,所以抽象类是用来被子类继承的。
(5)final和abstract无法同时出现,这两个关键字是对立的。
(6)抽象类的子类可以是抽象类,也可以是非抽象类。
(7)抽象类虽然无法实例化,但是抽象类有构造方法,这个构造方法是供子类使用的
(8)抽象类关联到一个概念,抽象方法,什么是抽象方法?
抽象方法表示没有实现的方法,没有方法体的方法
public abstract void doSome( );
(9)抽象方法的特点
没有方法体,以分号结尾;
前面修饰符列表中有abstract关键字。
(10)抽象类中不一定有抽象方法,抽象方法必须出现在抽象类中。
(11)(重要)一个非抽象的类继承抽象类,必须将抽象类中的抽象方法实现/覆盖/重写
2.接口
(1)接口基础语法
<1> 接口也是一种引用数据类型
<2> 接口是完全抽象的(抽象类是半抽象的)或者说接口是特殊的抽象类
<3> 接口的定义:
[修饰符列表] interface 接口名{
}
<4> 接口支持多继承,一个接口可以继承多个接口
<5> 接口只包含常量和抽象方法
<6> 接口中所有的元素都是public
<7> 接口中的抽象方法定义时,public abstract可以省略
<8> 接口中的方法都是抽象方法,所以接口中的方法不能有方法体
<9> 接口中的常量,public static final可以省略
<10> 类和类之间叫继承,类和接口之间叫实现(实现也可以看做“继承” 继承使用extends关键字,实现使用implements关键字)
<11> (重要)当一个非抽象的类实现接口的话,必须将接口中所有的抽象方法全部实现(覆盖/重写)
<12> (重点)一个类可以实现多个接口。弥补了类与类直接的单继承
<13> 接口和接口之间在进行强制类型转换的时候,没有继承关系也能强转,但是运行时有可能出现ClassCastException异常
<14> extends(继承)和implements(实现接口)同时出现是继承在前,实现在后
<15> 使用接口,写代码的时候,可以使用多态(父类型引用指向子类型对象)
(2)接口在开发中的作用
接口在开发中的作用类似多态在开发中的作用;
满足has a的表示都以属性的形式存在;
面向抽象编程,不要面向具体编程;降低程序的耦合度,提高程序的扩展力,符合OCP原则,接口的使用离不开多态机制;
接口可以解耦合,解的是调用者和实现者的解耦合;
3.抽象类和接口的区别
抽象类是半抽象的,接口是完全抽象的;
抽象类中有构造方法,接口中没有构造方法;
接口和接口之间支持多继承,类和类之间只能单继承;
一个类可以同时实现多个接口,一个抽象类只能继承一个类(单继承)。
接口中只允许出现常量和抽象方法。
扩展
类和类之间的关系
is a:表示“继承关系”
has a:表示“关联关系”,通常以“属性的形式存在”
like a:表示“实现关系”,通常是类实现接口
三、package和import
1.package
(1)为什么要使用package?
package是java中的包机制,包机制是为了方便程序的管理,不同功能的类分别存放在不同的包下。
(2)package怎么用?
package是一个关键字,后面加包名;
package语句只允许出现在java源代码的第一行。
(3)包名的命名规范
一般都采用公司域名倒序的方式(公司域名具有全球唯一性)
包名命名规范:公司域名倒序+项目名+模块名+功能名
(4)对于带有package的java程序怎么编译?怎么运行?
(指用文本编译器编译)
编译:javac -d . 类名.java
运行:包名.类名
2.import
(1)import什么时候使用?
一个类要使用另一个类,并且两个类不在同一个类中的时候,需要使用import
(2)import怎么使用?
import语句只能出现在package下面和class的声明语句之上
(3)String是java.lang下的,为什么不需要导入
因为java.lang.*下的很特殊,可以直接用,不需要import导入(System也是lang下的)
四、访问控制权限
1.有哪些访问控制权限?
(1)private 私有
(2)protected 受保护
(3)public(公开)
(4)默认
2.访问控制权限控制的范围有哪些?
(1)private 表示私有的,只能在本类中访问
(2)public 表示公开的,在任何地方都能访问
(3)protected 表示只能在本类、同包、子类中访问
(4)默认 表示只能在本类,以及同包下访问
3.访问控制权限修饰符可以修饰什么/
属性(4个都能用)
方法(4个都能用)
类(只能用public和默认)
接口(只能用public和默认)