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();
        }
}

简单的程序代表简单的概念,理解好一个类中有什么,一个类创建的过程。那么就理解了封装。属性的关键在于数据类型和名称。方法的关键在于返回值,方法名称,方法参数(参数类型,参数名称)。


原文地址:https://www.cnblogs.com/MedivhQ/p/4074998.html