Python 4)面向对象的进一步拓展

来源:互联网 发布:知乎 不能修改提问 编辑:程序博客网 时间:2024/06/04 09:37

对象的性质

     我们讲到了许多属性,但这些属性是类的属性。所有属于该类的对象会共享这些属性。比如说,鸟都有羽毛,鸡都不会飞。

     在一些情况下,我们定义对象的性质,用于记录该对象的特别信息。比如说,人(person)这个类。性别是某个人的一个性质,不是所有的人类都是男,或者都是女。这个性质的值随着对象的不同而不同。李晨是人类的一个对象,性别是男;范冰冰也是人类的一个对象,性别是女。

     当定义类的方法时,必须要传递一个self的参数。这个参数指代的就是类的一个对象。我们可以通过操纵self,来修改某个对象的性质。


面向对象所能接触到的关键字与知识点: 

  成员变量和局部变量的区别?
    1)在类中的位置不同
 成员变量:在类中,方法外
  局部变量:在方法声明上或者在方法定义中
    2)两个生命周期不同
  成员变量:成员变量是通过加载所在的类(是随着类的加载而加载
  局部变量:随着方法调用而存在,随着方法调用完毕而消失
    3)在内存中的位置不一样;l
  成员变量:在堆内存中(系统对成员变量默认初始化值)
  局部变量:在栈内存中
    4)初始值不同
  成员变量:在成员变量位置可以先不赋值
  局部变量:要么必须赋值,要么就是在使用之前赋值,否则报错

       //成员变量

int num = 10 ;

public void show(){
//局部变量
int num2 = 20 ; 
int num = 20 ;

       上述是个面试题,望大家理解+熟记

   封装private:  

       private: 私有的,不可访问,可以修饰成员变量,也可以修饰成员方法

      特点是被private修饰的成员只能在本类中访问,那么需要提供公共访问方法.并且提供对应的setXXX()/getXXX()方法. 

      定义一个学生类,提供成员变量姓名,和年龄
       成员方法:show()方法
  
       按照正常创建的步骤,给对象进行赋值,发现年龄的值可以是负数,不符合实际规则!就应该在Student类中来给age加上一个判断,定义一个方法给age进行判断给age加入了判断,发现还是负值还是可以存在;
  针对这种情况:java给我们提供了一个关键字:private.

       封装是将一个对象的成员进行私有化,并且提供对外的公共访问方法.提高了安全性,提高了代码的复用性.


 this关键字:

         this:代表的是当前的类的对象

         不管是定义方法还是定义变量,都应该做到四个字:见名知意,给姓名和年龄进行赋值,发现问题:赋值的时候成员变量名称和局部变量名称一致,所以为了防止局部变量隐藏掉成员变量,java就提供了这个this关键字. 

static关键字:

    static关键字的注意事项:
   成员:
静态成员
   静态成员:简单记就是静态只能访问静态,并且静态成员中没有this关键字.
   静态成员变量:只能访问静态变量
   静态成员方法:只能访问静态成员方法
   非静态成员
   成员变量:可以是静态变量,也可以非静态变量
   成员方法:可以是静态成员方法,也可以非静态成员方法
            静态的特点:类名直接可以调用!
     //非静态成员变量
public int num = 1 ;

//静态成员变量
public static int num2 = 2 ;

//非静态成员方法
public void show(){
System.out.println(num2);
System.out.println(num);}

//静态的成员方法,只能访问静态成员变量
public static void method(){
         //System.out.println(num);
System.out.println(num2);
}

public void function(){
method();
}

public static void function2(){
            //function() ;
method() ;
}
}

 总结 

   通过self调用类属性

    类属性和对象的性质额区别

    成员变量和局部变量的区别

    封装和private : show()方法, setXXX()/getXXX()

    this关键字

    static关键字