Java面向对象之封装
作为面向对象,其实刚学习的时候觉得是一头雾水,很难一下子明白它弄清楚它的含义。
面向对象的概念比较笼统。封装,继承,多态,作为它的三个基本特征。词语比较抽象。现在我谈谈我对封装的理解。其实封装,我是这么理解的,把一堆具有相同特征的东西归类,打包。这个过程就可以认为是封装。把所有果汁,放到罐子里。这可以模糊的认为是一个封装过程。那么果汁们有什么共性呢?可以这么认为:他们都有一个特征,液态。液态可以认为是一个形容词,我们姑且认为这是所有果汁的一个属性(后面也可以称之为成员变量)。果汁们能做些什么呢?倒出来,我没能想到什么好主意。暂时,就说所有果汁能被倒出来。倒出来是一个动词,我们将它成为是果汁们的一个方法。将倒出来和液态联合起来放到一个叫果汁的名义下,就构成了类(class)。这样,一个java类就组成了。
所以,封装可以认为是一个创建类的过程。关键词就是 类(class)。笼统地说就是把属性和方法放到一个类中,就完成了封装。
举个简单的类子:
public class Person
{
static int one;
int two;
public static void run(int speed)//定义一个静态的方法,可以称作为动作。void代表不返回值, run代表方法名称,int 代表参数类型,speed代表参数名称
{
System.out.println("run with : "+speed);
return;//可以不用,但是return后必须直接加分号,代表跳到方法头,不返回值;
}
public int getMoney(int money)//定义一个普通的方法,可以称作为动作。
{
return money;
}
public static void main(String[] args)
{
int x=100;//类的关键一部分,属性也可以成为成员变量。
Person person = new Person();//生成Person的一个对象(实例),这个过程又叫实例化。其中真正的对象是new Person(),而person只是一个引用,它负责指向new Person()这个对象。
int getMoney=person.getMoney(x);//调用新生成的Person类的一个对象person的getMoney方法;
System.out.println("peroson getMoney : "+getMoney);
int a=300;//类的关键一部分,属性也可以成为成员变量。300是实际参数,300赋值给a,a是形式参数。
run(a);//不生成对象,直接调用类的静态方法;
run(one);//如果一个成员变量没有初始化,那么你可以以成员变量的形式调用它,如run(person.two),否则就只能调用静态的变量。
run(person.two);
run(Person.one);//等同上面run(one),
//run(300,500);果断不行与run方法中的参数个数不同。
//run("300km");依然不行"300km"是字符串,与run方法中的参数类型不同。
Person.run(x);//等同于run(x);
}
}
输出结果如下:
peroson getMoney : 100
run with : 300
run with : 0
run with : 0
run with : 0
run with : 100
再来一个程序:
public class People
{
static int age;
int height;
public int change(int age)
{
People.age=age;
return People.age;
}
public int change1(int height)
{
People p =new People();
p.height=height;//不是静态变量,只影响本对象的成员变量
p.age=22;//静态变量修改后影响全局
return p.height;
}
public static void main(String[] args)
{
System.out.println(People.age);
People p=new People();
System.out.println(p.age);
int height1=p.change(25);
System.out.println(height1);
System.out.println(p.height);
System.out.println(p.age);
People p1=new People();
int height2=p1.change1(20);
System.out.println(height2);
System.out.println(p1.height);
System.out.println(p1.age);
}
}
输出结果如下:
0
0
25
0
25
20
0
22
下面是关于构造方法的一个程序:
public class Test
{
public Test(int i)
/*构造方法是一种初始化类的方法,如果不自定义构造方法的话,编译器会帮我们自动生成一个不带参数,无执行语句的构造方法。每一次生成对象使用new 方法
就是一次调用构造方法的过程。
*/
{
System.out.println(++i);
}
public Test()
{
this(3);
System.out.println(3);
// this(3);编译错误,在一个构造方法中调用另一个构造方法,调用语句前不能有任何其他动作,调用必须放在首行。
}
public static void main(String[] args)
{
Test t=new Test();
}
}
简单的程序代表简单的概念,理解好一个类中有什么,一个类创建的过程。那么就理解了封装。属性的关键在于数据类型和名称。方法的关键在于返回值,方法名称,方法参数(参数类型,参数名称)。