package

package存在的意义是防止命名冲突造成使用不便。
package类似一个文件夹,文件夹内有各种文件。package与package的附属关系用“.”连接,类似父文件
夹中的子文件夹。比如说 java.lang.String就是java文件夹中的lang文件夹中的String文件。
java.io.InputStream则是java文件夹中的io文件夹中的InputStream文件。
同一个文件夹内无法存在同名的文件,而不同名的文件夹里允许存在同名文件,因此不同文件夹(即不
同package中允许出现相同class名)。

一般的命名为:公司域名倒写+功能名|模块名。
package 语句作为 Java 源文件的第一条语句,指明该文件中定义的类所在的包。(若缺省该语句,则指
定为无名包)。
例:
Java 编译器把包对应于文件系统的目录管理,package 语句中,用’.’来指明包(目录)的层次,例如使
用语句: package com.java01 ,则该文件中所有的类位于.\com\java01 目录下
注意:
不要定义与 jdk 相同的包,相同的类,否则会引起很多你觉得莫名其妙的问题
package pkg1[.pkg2[.pkg3…]];
package com.java01.test;
写项目时都要加包,不要使用默认包。
com.oop和com.oop.test,这两个包没有包含关系,是两个完全独立的包。只是逻辑上看起来后者
是前者的一部分。

import

如果一个类存在包名,则在其他包下使用该类时,必须使用全额限定名(简称全名或完整类名,com.java01.MyClass),  编译器才能找到该类;也可以使用 import 在文件的开头引入要使用到的类。

不需要使用 import 的类有:
1. 语言包 (java.lang)下的类 (String,System...)
2. 同包下的类

静态导入:

import 语句不仅可以导入类,还增加了导入静态方法的功能
 import java.util.Scanner;
 import java.io.*; //模糊匹配当前io包下所有类
 public class ImportDemo {
 public static void main(String[] args) {
 Scanner sc=new Scanner(System.in); //因为使用import关键字导包,可以使用
     java.util.ArrayList list=new java.util.ArrayList(); //权限定名
 //导入集合 注意:导入是不要导错包
     //使用*,模糊匹配
     File file=new File("D://test.txt");
 InputStream isInputStream=new FileInputStream(file);
 }
 }
 //导入静态属性
 import static java.lang.Math.PI;
 import static java.lang.System.out;
 //导入静态方法
 import static java.lang.Math.sin;
 public class ImportDemo {
 public static void main(String[] args) {
 out.println(PI);
 sin(1.1);
 }
 }

总结

如果想将一个类放入包中,在类的源文件首行使用package
必须保证该类的 class 文件位于正确的目录下
另外的类想访问的话:
1. 写全名
2. 引入
模糊匹配(会将该包下所有用到的类引入进来),会降低编译速度,但是不会影响运行
速度
具体类名
静态导入
3. 同包下的类不需要导入
JDK 中常用的包简单介绍:
1. java.lang –语言包:语言中常用的功能,如:String、Math、System、Integer、Thread…
2. java.util – 工具包:提供一些实用的工具类,如:容器(List、Set、Map…),日期类
3. java.io – 输入输出包:提供操作读取文件的相关类,如:File、InputStream、OutputStream…
4. java.net – 网络包: 操 作 远 程 资 源 的 类 , 如:InetSocketAddress、 DatagramPacket、
ServerSocket…
5. java.sql – 数据库包:操作JDBC的类,Connection、Statement、ResultSet….

*三大特性->封装*

概念
    需要让用户知道的暴露出来,不需要让用户了解的全部隐藏起来。这就是封装,白话: “ 该露的露,该藏的藏”。
    我们程序设计要追求“ 高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只
保留一些对外接口使之与外部发生联系。系统的其他部分只有通过包裹在数据外面的被授权的操作来与这个抽象数据类型交流与交互。也就是说,用户无需知道对象内部方法的实现细节,但可以根据对象提供的外部接口(对象名和参数)访问该对象。

 作用
    1. 实现了专业的分工。将能实现某一特定功能的代码封装成一个独立的实体后,各程序员可以在需要
的时候调用,从而实现了专业的分工,即工作中的分模块、分功能开发。
2. 隐藏信息,实现细节。通过控制访问权限可以将可以将不想让客户端程序员看到的信息隐藏起来,
如某客户的银行的密码需要保密,只能对该客户开发权限。

*三大特性->继承*

继承的本质 : 是对某一批类的抽象,从而实现对现实世界更好的建模。
继承的作用 : 使用继承可以提高代码的复用性。
如何使用继承 : 使用 extends 关键字即可。
    extends 关键字的意思是“扩展”。子类是父类的延续+扩展
    java 中使用 extends 关键字实现类的继承机制,语法规则:
    <modifier> class <name> [extends <superclass>]{}
    注意:
子类继承父类的成员变量和成员方法,但不继承父类的构造方法
java中只有单继承 ,没有像c++那样的多继承。多继承会引起混乱,使得继承链过于复杂,系统难
于维护。就像我们现实中,如果你有多个父母亲,那是一个多么混乱的世界啊。多继承,就是为了
实现代码的复用性,却引入了复杂性,使得系统类之间的关系混乱。
java中的多继承,可以通过接口来实现
如果定义一个类时,没有调用extends,则它的父类是:java.lang.Object。
        面向对象三大特性之一 : 继承  extends(延续+扩展)

    父类|基类|超类 : 被继承的类
        定义 : 子类的共性
               对子类进行抽象,抽出像的部分定义在父类中
    子类|派生类 : 继承父类的类
        子类继承父类就有权使用父类中的成员
        子类中可以扩展子类独有的内容

    为什么要使用继承 :
        为了更好的实现提高代码的复用性

    如何使用继承 :
        子类 extends 父类

    注意 :
        单继承机制 : 一个子类只能有一个父类,但是一个父类可以存在多个子类
            优点 : 简单方便   缺点 : 不便于后期维护
    继承优点 :
        提高代码复用性
        子类继承父类就有权使用父类的成员
        子类中可以扩展子类独有的内容
    继承的特点
        优点:
通过继承可以简化类的定义,实现代码的重用|提高代码复用性
可以更好的扩展程序
子类一旦继承父类,可以有权使用父类中的成员,也可以扩展定义子类独有内容
java是单继承继承,实现简单
        缺点:
子类与父类之间紧密耦合(耦合度高),子类依赖于父类的实现,子类缺乏独立性。
不便于后期维护
单继承一个子类只能有一个父类,不够灵活,不便于后期维护

11 权限修饰符

如果我写一个路径个java自己包重复的会怎么呀 java中package名与路径同名_子类