面向对象——三大特性之——封装
来源:互联网 发布:淘宝网电话人工服务 编辑:程序博客网 时间:2024/05/16 07:06
大纲:
1. 封装;
2. 构造函数;
3. this 关键字
封装性,面向对象的三大特点之一!
【封装】——Encapsulation
隐藏对象的属性和实现细节,仅对外提供公共访问方式。
【好处;】
1. 将变化隔离;
2. 便于使用;
3. 提高复用性;
4. 提高安全性;
【封装原则】
1. 将不需要对外提供的内容都隐藏起来;
2. 把属性都隐藏,提供公共方法对其访问。
【private 】——私有的数据只在本类中有效。其他程序创建对象是无法直接访问的。
【代码】——
class Person{private int age;public void setAge(int a){if(a > 0 && a < 100)age = a;elseSystem.out.println("输入的年龄不合法!");}public int getAge(){return age;}public void speak(){System.out.println("age + " + age);}}class PersonDemo{public static void main(String[] args){Person p = new Person();p.setAge(20);p.speak();int c = p.getAge();System.out.println("age +++++++++++++++++++++++ " + c);}}
解决:在本类中私有,但是为了便于其他类对其访问,可以对外提供一些公共的方法来完成。
【通常情况下:】——会将类中的成员变量私有化,为了避免属性直接被访问导致数据错误。
并对外提供了公共的访问方式,对该属性进行访问。
这样做的好处:可以对属性进行可控。
而对属性设置和访问的公共方法名称规范定义格式为:set属性() , get属性();
【私有】——仅仅是封装的 一种体现形式而已。*(函数就是一个最小的封装体)
【私有】——private 是一个关键字,权限修饰符,用于 修饰成员(成员变量 和成员函数),注意 一定是 ——>成员变量 成员函数。
/*
需求:造个类 猫,将其成员属性 私有,但对外提供设置的方法。
*/
class cat{ private int age; private String color; private String sex; public void setAge(int a) { if(a>0 && a<130) age = a; else System.out.println("您输入的数值不合法,请重新输入!"); } public int getAge() { return age; } public void setColor(String b) { color = b; } public String getColor() { return color; } public void setSex(String c) { sex = c; } public String getSex() { return sex; }}class fengZ1{ public static void main(String[] args) { cat c = new cat(); c.setAge(50); c.setSex("woman"); c.setColor("blue"); System.out.println("age = " + c.getAge() + "sex = " +c.getSex() + "color = " + c.getColor()); }}
【构造函数】
【什么是构造函数】
创建的每个对象都是一个实体,每个实体必须要进行初始化后才可以使用。实体的初始化是需要通过动作完成的。这个动作就是构造函数。
【构造函数】——
特点:
1.函数名 与类名相同
2.不用定义返回值类型;
3.没有具体的返回值;
【构造函数作用:】
给对象进行初始化。
【特点:】任何用class 定义的类中,都有一个默认的空参数的构造函数。用于给该类对象进行初始化。
如果该类中指定了具体的构造函数,那么默认的构造函数就被覆盖掉,没有了。
【构造函数和 一般函数的不同:】
1.书写格式上不同;
2.运行上的不同。
构造函数,是在对象一旦创建就被调用了。而且只执行一次。
一般函数,是对象创建完成后,需要时再调用,可以调用多次。
一般函数不能调用构造函数。构造函数是初始化的,初始化结束后,构造函数就结束。
3.构造函数里有 return 语句的,用于结束构造函数的初始化!
当一个类中存在着多个构造函数时,他们的存在形态是重载。
【构造函数什么时候用:】
当描述事物时,该事物一旦存在就具备着一些属性和行为;
那么就将这些内容定义在构造函数中。
【类的终结函数】
终结函数 finalize 方法:
a) 如果在类的层次结构中的类定义了 finalize 方法,子类finalize 方法的最后一个动作应该是 调用超类的 finalize 方法,以保证当垃圾回收器回收对象占据的内容时,对象的所有部分都能正常终止。
【代码体现】
class Person{private int age;private String name;Person(){System.out.println("Person now : RUN !");}Person(String s){name = s;}Person(String s , int a){name = s;age = a;}public void setName(String n){name = n;}public String getName(){return name;}public void speak(){System.out.println(name + ":" + age);}}class gouZ1 {public static void main(String[] args) {Person p = new Person("lisi");p.setName("lisisisi");p.setName("liswnagci ");p.speak();System.out.println(p.getName());Person p1 = new Person("wangwu" , 29);p1.speak();Person p2 = new Person();}}
【this】
【this关键字】
当成员变量和 局部变量同名的时候,为了区分,可以使用一个关键字来完成。
this:代表的是一个对象;代表那个对象呢?那个对象调用this所在的函数,this就代表那个对象。
this就是当前对象的一个引用。
this:
表现形式1 :当局部变量和成员变量同名时,可以用this 来区分。
表现形式2 :构造函数之间的调用可以使用this关键字,后面跟上小括号,指定具体的实参即可明确要调用的构造函数。
特殊情况:注意:调用本类中构造函数的this语句必须定义在构造函数的第一行。 因为初始化动作要先完成。
class Person{private String name;private int age;Person(){System.out.println("Person now: RUN!");}Person(String name){this();this.name = name;}Person(String name , int age){this(name);this.name = name;this.age = age;}public void show(){this.speak();}public void speak(){System.out.println(this.name + "————" + this.age);}}class thisDemo3 {public static void main(String[] args) {//new Person();Person p1 = new Person("wangwu");Person p2 = new Person("wangcai" , 35);p1.show();p2.show();System.out.println("Hello World!");}}
【this 什么时侯用:】
当定义功能时,功能内部使用到了调用该功能的对象。这时就用this来表示。
需求:在Person类中定义一个比较方法,判断是否是同龄人。
/*
需求:在Person类中定义一个比较方法,判断是否是同龄儿。
思路:
1.明确结果:boolean;
2.明确未知内容:Person因为是一个任意一个Person对象比较其中的年龄;
*/
class Person{private int age;private String name;Person(String name , int age){this.name = name;this.age = age;}public boolean compare(Person p){return this.age == p.age;}}class thisDemo1 {public static void main(String[] args) {Person p1 = new Person("wangwu" , 12);Person p2 = new Person("wangliu" , 45);boolean b = p1.compare(p2);System.out.println(b);System.out.println("Hello World!");}}
- 面向对象三大特性——封装
- 【面向对象】三大特性——封装、继承、多态
- 面向对象三大特性——封装、继承、多态
- 面向对象——三大特性之——封装
- 黑马程序员————OC面向对象_三大特性之封装
- 黑马程序员——OC语言基础——面向对象三大特性之封装
- 面向对象三大特性之封装
- 面向对象三大特性之封装
- 面对对象三大特性—封装
- C#-面向对象的三大特性——封装(封装成员变量、封装成员方法)
- 黑马程序员——OC面向对象三大特性——封装,继承,多态。
- 黑马程序员——OC面向对象三大特性——封装,继承,多态。
- 黑马程序员_面向对象思想概述和三大特性之一——封装
- 黑马程序员——OC语言基础:面向对象三大特性,封装、继承、多态
- java语言基础(23)——面向对象三大特性(封装、继承、多态)
- Java基础(7):面向对象三大特性—封装、继承和多态的详解
- Java — 面向对象的三大特性(封装、继承、多态)
- 面向对象语法3—对象的三大特性
- Vision 引擎8.2带来了跨平台的3D游戏技术
- 软件实施工程师
- Ubuntu Android NDK的使用
- 关于强制转换
- boost学习之—Filesystem
- 面向对象——三大特性之——封装
- 数据的提交
- android 定位服务
- Design T-Shirt
- XmlTextReader类
- 关于URL编码/javascript/js url 编码/url的三个js编码函数
- 关于Havok Vision SDK 8.2.4版本更新的通知
- 用实例给新手讲解RSA加密算法
- Oracle R12采购接收流程(PR-PO-RCV-AP-Payment)