zoukankan      html  css  js  c++  java
  • 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();
            }
    }

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


  • 相关阅读:
    在TreeView控件节点中显示图片
    PAT 甲级 1146 Topological Order (25 分)
    PAT 甲级 1146 Topological Order (25 分)
    PAT 甲级 1145 Hashing
    PAT 甲级 1145 Hashing
    PAT 甲级 1144 The Missing Number (20 分)
    PAT 甲级 1144 The Missing Number (20 分)
    PAT 甲级 1151 LCA in a Binary Tree (30 分)
    PAT 甲级 1151 LCA in a Binary Tree (30 分)
    PAT 甲级 1149 Dangerous Goods Packaging
  • 原文地址:https://www.cnblogs.com/MedivhQ/p/4074998.html
Copyright © 2011-2022 走看看