身为一名程序员,面向对象的三大特征你一定知道吧
继承,多态,封装
今天我们就来学习一下,如何对变量进行封装,以及使用自定义类、和setter/getter方法对数组进行封装。
一、封装变量
首先我们需要将设置的变量设置成为私有属性(private),
然后再写setter/getter方法进行封装。
class Test{
private int age;
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
}
这就是最简单的封装变量了,因为变量是私有的,所以外界并不能访问,但是我们需要使用这个变量的时候应该怎么办呢?
这时我们就需要使用setter/getter方法,对外界提供一个接口,来访问这个变量。
调用封装的变量
封装之后我们应该怎么调用它呢?
变量赋值:Test.setAge(9); // 将变量赋值 9
因为setter方法提供的接口就是将参数传入,对变量进行赋值。
变量调用:Test.getAge();
getter方法里面只有return,而它的返回值就是这个变量本身,所以直接调用getAge()就可以得到他的值。
注意:在使用的时候,如果我们想修改这个变量的值,一定要使用setter方法进行修改,因为setter方法就是对变量进行赋值的方法。
不能直接使用getter方法获取变量值,然后进行修改。因为getter方法获取到的值不是变量,所以不可以直接修改。
例如,不可以这样写:
if (Test.age == 9) {
Test.age = 10; //这是不对的
}
如果想对变量进行修改,我们可以这样写:
// 如果年龄为9,则修改为10
if (Test.age == 9) {
Test.setAge(10); //这样写是对的
}
二、封装数组
(1)使用自定义类,对数组进行封装
对数组进行封装,一般都会使用这种方法,因为可以很方便的实现一些功能
下面是几个实例:
class Test{ // 对数组进行封装
//对变量进行私有化
private static int []array;
private int index = 0; //数组下标
public Test() { //初始化数组长度
array = new int[4];
}
public void insert(int temp) { //向数组中插入元素
array[index] = temp;
index++;
}
public void appointInsert(int temp, int i) { //修改指定位置的元素值
if (i >= 0 && i < array.length) {
array[i] = temp;
} else {
System.out.println("错误");
}
}
public int search(int temp) { //找到数组中某个值,并返回此下标索引
for (int i = 0;i < array.length;i++) {
if (array[i] == temp) {
return i;
}
}
return 0;
}
public void printArray() { //打印数组
for (int i = 0;i < 4;i++) {
System.out.print(array[i]+",");
}
System.out.println();
}
}
class Main{
public static void main(String[] args) {
Test t = new Test();
t.insert(0); //插入四个元素
t.insert(1);
t.insert(2);
t.insert(3);
System.out.println("赋值之后的数组: ");
t.printArray();//打印数组
t.appointInsert(99, 2); //修改第2个位置的元素为99
System.out.println("修改之后的数组: ");
t.printArray();
System.out.println("查找结果: "+t.search(99)); //查找元素99所在位置,并打印出来
}
}
运行结果如下:
本例中只写了查找、修改、增加,其它方法也类似。
(2)使用setter/getter方法对数组进行封装
我们这里使用setter/getter方法封装数组
class Test{
private int[][] array = new int[4][4];
public void setAge(int array[][]) {
this.array = array;
}
public int[][] getArray() {
return array;
}
}
注意:但是这里我们封装的整个数组,而赋值的时候,也是只能对整体赋值,因为setter方法传入的参数就是整个数组,getter方法返回的也是整个数组。
如果我们需要对数组中的某个值进行赋值或修改,则应该这样写:
class Test{ // 对数组进行封装
private static int [][] array = new int[4][4];
public static void setArray(int temp, int i, int j) { //temp为将要赋予的值,ij为数组下标索引
array[i][j] = temp;
}
public static int getArray(int i, int j) { //这里将属性设置为int,代表返回一个数,而不是整个数组
return array[i][j];
}
}
class TestOne { //调用这个变量,和使用它
public void run() {
Test.setArray(4, 2, 3);//将数组中第2行3列的值,赋值为4
Test.setArray(5, 1, 2);
if (Test.getArray(1, 2) == 5) { //如果数组中这个位置的数为5,则将他修改
Test.setArray(6, 1, 2);
//Test.getArray[1][2] = 6; 这么写是不对的,因为左面不是变量
}
//打印这个数组
for (int k = 0;k < 4;k++) {
for (int w = 0;w < 4;w++) {
System.out.print(Test.getArray(k, w));
}
System.out.println();
}
}
}
class Main{
public static void main(String[] args) {
TestOne t = new TestOne();
t.run();
}
}
注意放在三个类里面
运行结果为:
我们可以看到,对数组2行3列,和1行2列进行了赋值,并对1行2列的值进行了修改。
好了,内容到这里就结束了,以上是关于封装变量的一些知识,是我自己在写项目中发现并解决的问题,然后进行了一些总结,来分享给大家。
如果发现有哪里不对,请多多指教,大家一起交流。
可以在下面评论指出问题,我会及时改正。