包
什么是包?
包是一种组织类的一种形式,最主要的是防止类名冲突,所以一个类会定义到一个包里当想用这个包里的类的时候就要先导包来引导编译器找到这个类。
Java中的包类似C++里面的#include 但是有一点区别,Java导包不能导入具体的包,只能导入具体包里面的具体的类。
如果使用“通配符”来导入一个包里面的所有内容,那么Java不会全部导入进来,而是在程序运行的时候需要那个包的类就会自动去找,而不是全部正进来这样大大提高了空间利用率。
如果是C++那么包一个头文件会把所有方法都拷贝进主方法,不管你会不会用得到。
导入包中的类
Java中导入包的语法:import java.包名.类名
例子:
import java.util.Date
package和import的区别
package 类似C++里面的命名空间域给源文件标记一个名字,这样就可以防止名字冲突。
import 类似C++里面的包含头文件,用来告诉编译器哪里可以找到这个类。
静态导入
使用import static 可以导入包中的静态方法和字段,不过这种导入方式用的场景非常少,我们了解即可。
例子:
import static java.lan.Math.*;
public class Test {
public void main(String[] args) {
double ret = sqrt(8);
}
}
将类放到包中
基本规则
- 在文件的第一行加
package 关键字来指定该代码在那个包中。 - 包名需要尽量指定成唯一的名字,通常会用公司的域名颠倒形式(
com.ls.demo ) - 包名和代码的路径要匹配(如:创建
com.ls.demo 的包,那么会存在一个对应的路径com/ls/demo 来存储代码。 - 如果一个类中没有
package 来指定是那个包中的类,那么该类会放到默认包中。
具体操作步骤
创建包:
创建包名:
回车表示输入完成,当回车之后会生成一个包。
接着我们在新建的包里面创建一个类。
此时编译器就会在磁盘上创建一个路径,我们跟着路径走到低回发现有一个刚刚我们创建的类。
同时我们用idea 打开这个类会发现idea 会自动帮我们加上package 指定包。
包的访问控制权限
public 和private 也能对包进行作用,如:包中的一个成员有priavte 权限只能在类里面使用,如果是public 则可以在包外也能调用,如果什么都不加那么默认只能在包里面使用该成员。
常见的系统包
java.lang (系统常用基础类,此包从JDK1.1之后就会自动导入)java.lang.reflect (Java反射包)java.net (进行网络编程开发包)java.sql (数据库开发的支持包)java.util (java提供的工具程序包,(集合类等等)很重要)java.io (I/O编程开发包)
继承
继承本质是为了提高代码的复用性,减少冗余代码来达到高效开发的目的。
继承除了private 修饰的成员,其它成员都会被子类继承。
举个例子: 动物,动物有很多种而动物都有一个特性有性别、年龄和行为等等……如果我们一个动物定义一个类的会,那么里面会有很多重复出现的成员,这时我们可以不可以用一个类概括所有动物而且这个类都有所有动物都会有的成员,于是就有了这样的设计先创建一个动物类,再用一个具体的动物类来继承这个动物这样提高了代码的复用性同时也减少了代码量。
继承语法
继承语法: class 子类 extends 父类 {}
- Java中不存在多继承只有单继承。
- 使用
extends 来指定继承的父类 - 子类可以使用父类里面的所有
public 的字段和方法。 - 父类中的
private 修饰的字段和方法,对于继承的子类是不可见的(当然也可以理解成没有继承下来也对)。 - 子类的实列中也包含了父类的实列,可以使用
super 关键字得到父类实列的引用。
this和super的区别
this 的作用是在类里面是该类的一个实列引用,谁是实列,那么this 就是那个实例的引用。
super 的作用是显示调用父类的方法或成员,有时候子类和父类有一个相同名字的方法或成员变量,编译器调用自己当前类的,想调用父类的就用supear 显示调用。
protected关键字
有时候我们对成员的权限控制的时候有一个需求,我们想让子类能调用该方法同时不然类外的对象调用,这个时候我们用public 和private 都无法满足。
这时protected 就诞生了,protected 主要是用来解决继承中的问题,它可以被子类访问但不能被类外的对象访问。
- 对于类的调用者来说
protected 修饰的字段和方法是不能访问的。 - 对于类的子类和同一个包的其它类来说,
protected 修饰的字段和方法是可以访问的。
总结:Java中对于字段和方法共有四种访问权限
private: 类内部能访问,类外部不能访问。- 默认(包访问劝降):类内部能访问,同一个中的类也能访问,其它类不能访问。
protected: 类内部能访问,子类和同一个包中的类也可以访问,其它类不能访问。public: 类内部和类的调用者都能访问。
final关键字
final 不仅可以修饰一个变量或字段,还能修饰类。(修饰字段或变量的时候表示该变量是常量)
当也给类被final 修饰的时候是无法继承的。
例子:
final class A {
}
class B extends A {
}
|