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

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


  • 相关阅读:
    mysql show profiles 使用分析sql 性能
    面向对象三大特征---封装、继承、多态
    http_build_query用法,挺方便的
    请求数据
    多模匹配算法之Aho-Corasick
    php命名空间如何引入一个变量类名?
    MySQL错误:Can't connect to MySQL server (10060)
    Vim完全教程
    路由
    wireshark
  • 原文地址:https://www.cnblogs.com/MedivhQ/p/4074998.html
Copyright © 2011-2022 走看看