封装、继承、多态是OOP的三大特性。看完了《类和对象》《封装》《继承》《各种内部类》在帮助大家理解一下本篇《final关键字、权限修饰符和包
》
一、final关键字 (英文意思是:最终的,最后的 )
1、所以被 final修饰之后不能改变 可以修饰 类、方法、变量
2、修饰类
:
(1) 表示一个类是最终的,此时不能有子类了
(2) 一个类如果被final修饰了,就是一个断子绝孙类
3、修饰方法
:
(1) 表示这个方法不能被重写了,是一个最终方法
4、修饰变量
:
(1) 一个变量如果被final修饰了,就会变成常量,只能赋值一次
① 可以定义和赋值分开,但是只能赋值一次
public class Demo01 {
public static void main(String[] args) {
//常量:所有单词的所有字母都要大写,单词和单词之间使用下划线连接
final int A = 100;//定义一个常量,常量的值为100
// A = 200; 只能赋值一次
final int B;
B = 20;
System.out.println(B);
}
}
//修饰类,表示该类不能有子类,是一个断子绝孙类
final class Fu{}
//class Zi extends Fu{
//}
class Fu2{
//如果是最终成员变量,就一定要注意,在创建对象的时候,在初始化的过程中,一定要赋值
// final int C;
// {
// C = 20;
// }
public Fu2(){}//此时空参构造不会给C赋值,所以如果用空参,则C没有值,就报错
public Fu2(int c){
C = c;
}
//final修饰方法表示最终方法 不能被重写
public final void test(){
System.out.println("我是该功能的天花板");
}
}
class Zi extends Fu2{
// public void test(){
// System.out.println("我能行吗");
// }
}
二、权限修饰符
修饰成员,决定变量可以在什么位置被访问,封装的体现 控制属性和方法的访问范围
(1) private
① 只能在本类中被访问
(2) default默认
① 可以在本类中被访问
② 可以在本包中被访问
(3) protected
① 可以在本类中被访问
② 可以在本包中被访问
③ 可以在其他包的子类中被继承
(4) public
① 可以在本类中被访问
② 可以在本包中被访问
③ 可以在其他包的子类中被继承
④ 可以在其他包的无关类被访问
三、包
1、分类管理代码资源的文件夹,这些文件夹会参与编译 包的本质就是文件夹(package.pkg.pkg)
如 com.demo下的Demo1编译之后字节码文件名:com.demo.Demo01 【全类名 = 包名 + 类名】
2、作用:
(1) 统一管理代码资源 并 保证代码编译后 全类名唯一
(2) 保证代码运行过程中,直接进入到指定的包找到对应的类 import package.package
3、命名规则: 包名和包名之间使用点间隔,使用公司的域名倒写 全部小写
一般利用公司域名倒置作为包名; www.baidu.com 包名com.baidu.www
4、包的声明:声明java文件是属于哪个包 package + 包路径
*
通配符导入包下所有的类
test包下 (不同包)
package com.test;
//同一个包下的类,相互之间可以直接访问
public class Demo01 {
public static void main(String[] args) {
OldMan o = new OldMan();
o.show();
}
}
package com.test;
//不同包下可以有同名的类
//同一个包下不能有同名的类
public class OldMan {
public void show(){
System.out.println("我是com.test包下的OldMan~~~~~~~~~~~~~~~~~");
}
}
----------------------------------------------------------------------------------
demo包下 (不同包)
package com.demo;
public class Demo02 {
public static void main(String[] args) {
OldMan o = new OldMan();
o.show();
}
}
package com.demo;
public class OldMan {
public void show(){
System.out.println("我是com.demo包下的OldMan");
}
}
---------------------------------------------------------------------------------------
HomeWork包下
package com.homework;
import com.demo.OldMan;
//导包的时候,不能出现导入两个同名的类
public class Demo01 {
//只有公开的类,才可以在不同的包下创建对象时使用
public static void main(String[] args) {
//全类名的方式创建对象
//如果在某个类中,需要使用两个同名的类,分别属于不同的包下,就需要使用全类名的方式去访问
com.demo.OldMan o = new com.demo.OldMan();
o.show();
com.test.OldMan o2 = new com.test.OldMan();
o2.show();
//后来经过优化之后,可以使用import进行导包,定位要使用的类在哪个包中
OldMan o3 = new OldMan();//此时因为上方导入的是demo包下的类
//此时创建对象。默认使用的就是该包下的类
o3.show();
com.test.OldMan o4 = new com.test.OldMan();;//此时因为上方导入的是demo包下的类
//此时创建对象。默认使用的就是该包下的类
o4.show();
}
}
扩展:
//IDEA:ctrl+d;复制当前行到下一行
java doc
https://docs.oracle.com/javase/8/docs/api/
api java帮助文档
/*
* @author Shuyuan 作者名
* @version 1.0 版本号
* @since 1.8 指明需要最早使用的jdk版本
* @param 参数名
* @return 返回值情况
* @throws 异常抛出情况
*/