目录
一、封装
1.什么是封装?
封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开的接口和对象进行交互(对类进行包装,将一些细节隐藏起来,提供一些公开访问的东西就可以)。可以类比成一个手机,你只能看到外壳包装,确看不到内部元件的构成。
2.如何实现封装?
1.实现封装
java中主要通过类和访问权限来实现封装
- 类可以将数据以及封装数据的方法结合在一起
- 访问用来控制方法或者字段能否直接在类外使用
- 不让别人知道就使用private,而被private修饰的成员变量或成员方法只能在当前类中被访问,其他类不能访问;
- public就是都可以访问;
- public和private都是访问限定符;
2.访问封装中的内容
如果被private修饰了只能在当前的类中使用,在其他类中无法使用,如果我想在其他类中使用怎么办?
代码如下:
class Cat{
private String name;
private int age;
public String getName(){
return this.name;
}
public void setName(String name){
this.name=name;
}
public int getAge(){
return this.age;
}
public void setAge(int age){
this.age=age;
}
public void fun(){
mew();
}
private void mew(){
System.out.println("喵喵叫~");
}
}
public class Test {
public static void main(String[] args) {
Cat cat=new Cat();
cat.setName("小白");
cat.setAge(3);
cat.fun();
}
}
既然private只能在被当前类中使用,那么我们可以在当前类中使用成员方法来访问被private的成员变量或成员方法。
为什么被封装了还要在进行访问?
拿上面的图举例,我要实现如果有一个变量a,a等于1的时候,才能打印出喵喵叫这个结果,但我不想要让别人看到他是如何运行才得到的结果,只要别人要到这个结果就好,所以我要把这个具体的时候过程隐藏起来。
3.访问限定符
访问限定符:管当前修饰的字段或方法的访问权限
访问限定符有哪些?
理解:
private:私有的,只有自己能知道,其他人不知道;
default:只有自己家里人知道,其他人不知道;
public:公开的,所有人都能看到;
protected:继承中会讲到。
他们范围中的包的是什么?
4.包
1.什么是包?
包:为了更好的管理类,把多个类收集在一起,成为软件包。同一个类也可以根据不同属性再次进行组合。包的本质就是文件夹。
常见的包
- java.lang:系统常用的基础类(String、Object);
- java.lang.reflect:java反射编程包;
- java.net:进行网络编程开发包;
- java.sql:进行数据库开发的支持包;
- java.util:是java提供的工具程序包;(非常重要)
- java.io:l/O编程开发包。
2.导入包中的类
1.相同包不同类
public static void main(String[] args) {
int[] array={1,2,3,4};
}
java中已经提供了很多现成的类供我们使用,如果我们要打印这个数组,我们可以借助工具类Arrays来,我们可以将Arrays写出来来确定Arrays在哪一个包中。
我们要使用这个类就要将他们的路径写出来。
- 推荐第一种,第二种写的有点长
- 推荐第一种:指定导入的类名,为什么?
2.如果在不同的包中有相同的类的情况:
- 如果遇到相同类不同包,java.util.*这样写法无法使用 ;
- 你使用的时候也不知道使用的是这个包的哪一个类 ;
也可以使用import static导入包中的静态的方法和字段
import static java.lang.Math.*;
public class Test4 {
public static void main(String[] args) {
double x=23;
double y=53;
//double result=Math.sqrt(Math.pow(x,2)+Math.pow(y,2));
double result=sqrt(pow(x,2)+pow(y,2));
}
}
- 这种一般不写
3.不同包的使用的相互使用:
Test2和Test_0716这两个类是在不同包底下的不同类。如果我要在Test_0716中使用Test2.java中的方法,应该怎么做?
- 首先在Test_0716类中写出Test2,编译器会自动显示,Test2在那个包下,点击,会自动声明
- 其次就是进行类的实例化以及使用和平常没有区别
3.自定义包
步骤: