package(包)+访问修饰符

用于完成不同功能的类的分门别类,放在不同的目录包下:
将公司的域名反转作为包名。
对于包名:每个字母需要小写。
例如:
package com.test.javabase;
如果没有定义,则认为其在默认的default包里面。

Javac -d . Xxx.java
编译java文件指定编译后的class文件所在目录
aa aa.bb后者是前者的子包。

导入(import)
将使用package分离的个各类导入回来,是java程序可以编译
Aa.bb.cc如果是aa.bb.*并不能导入aa.bb.cc下面的类。

总结:
Package import class的顺序问题:1、首先需要定义包(package),可选
2、用import 进行导入,可选
3、最后才是class 和 interface的定义
4、只有需要使用的类不在当前类所在包,则需要导入,否则不导入。

1)public:都可以访问
2)protected:该类,相同包,该类的子类中访问(并非生成对象间接访问)子类可以吧protected变量和方法继承
3)private:可以在类内部可以访问,子类不会继承其修饰的成员变量和方法
4)默认的访问修饰符:在类内部,相同包下面的类可以访问

  1. public、private和protected对我们来说没有任何异议。

  2. 顶层类只能用public访问修饰符和default(默认)访问修饰符修饰,其中用默认修饰符修饰的类(及没有任何修饰符的类,如class B{})不能被其他包中的类继承,这也说明了default(默认)访问修饰符突出的是包权限

  3. protected:本人做了一次实验,发现在不同包的子类中,new一个父类对象,并用该父类对象去访问父类中的用protected修饰的类属变量和方法时不能访问,而new一个子类对象时,子类对象可以访问(说明protected修饰的类可以被其他包中的类继承)。也可以在子类重写父类的方法中使用super关键字调用。这岂不是和上面表格中的总结(红色对勾)冲突了?本人也是百思不得其解。最后在网上找到了一个相对比较认可的解释,如下:    
    package(包)+访问修饰符
    protected修饰符的修饰的成员变量和方法也称为受保护的成员变量和方法, 受保护的成员变量和方法可以在本类或同一个包中的其它类(包括子类)中通过类的实例进行访问,也可以被同一个包中的类或不同包中的类继承,但是不能在不同包中的其它类(包括子类)中通过类的实例进行访问。

  4. 如果一个类使用public修饰,那该类的类名必须与他所在的源文件名相同。一个.java源文件中有且只有一个public类,顶层类只能用public和默认修饰符(即无修饰符)修饰;

  5. final修饰的类不能被继承,没有子类。

  6. abstract修饰的类不能被实例化,必须被子类继承。类只要有一个抽象方法就必定是抽象类,但抽象类不一定要有抽象方法。

最终总结,就一句话:protected修饰符所修饰的类(这句话中指父类)属成员变量和方法,只可以被子类访问,而不管子类是不是和父类位于同一个包中。default修饰符所修饰的类属成员变量和方法,只可被同一个包中的其他类访问,而不管其他类是不是该类的子类。protected属于子类限制修饰符,而default属于包限制修饰符。

instanceof:判断某个对象是否是某个类的实例
引用名 instanceof 类名(接口名),返回一个Boolean值

相等性比较(==)
1) 原生数据类型判断值是否相等
2) 地址是否相同,两个引用是否指向同一个对象