黑马程序员技术交流社区

标题: 面向对象(类、封装、this、构造方法) [打印本页]

作者: xinfei.liu    时间: 2017-10-11 13:56
标题: 面向对象(类、封装、this、构造方法)
[Java] 纯文本查看 复制代码
package com.it.day07.Demo01;
/**
* 面向对象(类、封装、this、构造方法)
*
* 三大特征是:封装,继承,多态
*     理解面向对象思想:在刚刚学习javaee编程,比如水仙花,首先是搞清楚要做什么,然后分析怎么做,最后代码的实现。
* 每一步骤我们都是参与者,并且需要面对具体的每一个步骤和过程,这是面向过程的表现。
* 那么什么事面向对象开发呢?
* 在刚学习编程需求简单单一,只要按照步骤去操作,这样没问题,毕竟开发会跟着需求增多而修改,功能增多。开始思索,
* 能不能把这些步骤,根据不同的功能,进行封装,公共的部分进行封装,用的时候,找到相应的类就可以了,这就是面向对象思想。
*
* 面向对象的思想:
* 1.面向对象是基于面向过程的编程思想。
* 2.面向过程:强调是每一个功能的步骤。
* 3.面向对象:强调的是对象,然后由对象去调用。
* @author zx
*/
public class ObjectOriented {

}[mw_shl_code=java,true]package com.it.day07.Demo01;
/**
* 类是一种引用类型,不能直接使用,如果想用这个类,一定要根据这个类创建一个对象 *
* 类使用三个步骤:
* 1.导包
* 如果使用目标类,和当前类,位于同一个package包下,那么可以省略导包语句不写。
* 2.创建
*       数据类型 变量名称 = new 数据类型();
* 对应:类名称 对象名 = new 类名称();
*                  Studend stu = new Student();
* 3.使用
* 使用成员变量:变量名.成员变量
* 使用变量方法:变量名.成员方法();
*
* 如果成员变量没有赋值,那么会有一个默认值。
* 如果是整数就是0,如果是浮点型就是0.0,如果是字符就是'\u0000',如果是布尔就是true或false
* 如果是引用类型就是null
* @author zx
*/
public class Demo02Student {
       
        public static void main(String[] args) {
               
                Student stu = new Student();
                System.out.println(stu.name);//null 成员变量没有初始化默认为初始值
                System.out.println(stu.age);//0               
                stu.eat();
                stu.sleep();
                stu.study();               
        }
}
[mw_shl_code=java,true]package com.it.day07.Demo01;
/**
* 类与对象及使用
* 定义一个类,用来模拟现实世界中的学生的事物
* 学生事物包含两个部分:
*                 属性:姓名、年龄、性别
*                 行为:吃饭、睡觉、学习
* 对应到类中:
*                 成员变量(属性)
*                         String name;
*                         int age;
*                         boolean ex;
*                 成员方法(行为)
*                         public void eat(){...}//吃饭
*                         public void sleep(){...}//睡觉
*                         public void study(){...}//学习
* 注意事项
* 1.如果一个变量直接定义在类中,不在方法中,那么这就是一个成员变量。
* 2.如果一个方法定义的时候,去掉关键字static,那么这就是成员方法。
*
* 对象的创建及其使用
*                 创建对象:类名 对象名 = new 类名();
* 使用对象访问类中的成员:
*                 对象名.成员变量
*                 对象名.成员方法
*
* 成员变量和局部变量的区别
* 1.位置不同
*                 a 成员变量:类中,方法外
*                 b 局部变量:方法中或者方法生命上(形参)
* 2.在内存中的位置不同
*                 a 成员变量:栈内存
*                 b 局部变量:堆内存
* 3.生命周期不同
*                 a 成员变量:随着对象的创建而存在,随着对象的消失而消失
*                 b 局部变量:随着方法的调用而存在,随着方法调用完而消失
* 4.初始值不同
*                 a 成员变量:有默认值 ;b 局部变量:没有默认值,必须先定义,赋值,后使用。
* @author zx
*/
public class Student {
        //成员方法
        String name;//姓名
        int age;//年龄
        //成员方法
        public void eat(){
                System.out.println("吃饭!!!");
        }       
       
        public void sleep(){
                System.out.println("睡觉!!!");
        }
       
        public void study(){
                System.out.println("学习!!!");
        }
}
[mw_shl_code=java,true]package com.it.day07.Demo01;
/**
* 构造方法也是一种方法,但是是专门用来创建对象的方法。
* 当通过new关键字创建一个对象的时候,实际上就是在调用构造方法。
*
* 构造方法的格式:
* public 类名称(参数类型 参数名称, ...) {
*                 方法体;
* }
*
* 注意事项:
* 1. 构造方法的名称必须和所在的类名称完全一样,大小写也要一样。
* 2. 构造方法根本不写返回值类型,连void都不写。
* 3. 如果没有定义任何构造方法,那么编译器(javac)将会赠送一个默认的。
* 4. 如果自定义了至少一个构造方法,那么编译器将不再赠送构造方法。
* 5. 构造方法也可以进行重载(Overload):名字一样,参数不一样。
* @author zx
*
*/
public class PersonConstructor {
        // 成员变量
        private String name;
        private int age;
       
        //默认构造器
        public PersonConstructor(){
               
        }
        //自定义带参数的构造器
        public PersonConstructor(String name, int age) {
                super();
                this.name = name;
                this.age = age;
        }
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
        public int getAge() {
                return age;
        }
        public void setAge(int age) {
                this.age = age;
        }
       
}
[mw_shl_code=java,true]package com.it.day07.Demo01;
/**
* 封装
* 问题描述:定义Person的时候,无法阻止错误的脏数据被设置到成员变量中。
* 解决方案:使用一个private关键字将需要保护的成员变量修饰一把。
*
* 一旦被private修饰,那么只有本类当中才可以直接访问。超出了本类的范围,外面不能直接访问。
* 专门为private的成员编写,编写一对儿成员方法:Setter Getter
*
* 使用private关键字练习定义一个手机类。
*
* 属性:品牌、价格、颜色
* 行为:打电话、发短信
*
* private关键字:是一个权限修饰符。可以修饰成员(成员变量和成员方法), 被private修饰的成员只在本类才能访问。 *
* 需要为每一个private成员变量编写一对儿Setter Getter方法
* 【特例】对于基本数据类型当中的boolean来说,setXxx规则不变,但是getXxx一定要命名成为isXxx的形式。
*
* 封装的好处:1.通过方法来控制成员变量的操作,提高了代码的安全性;2.把代码用方法进行封装,提高了代码的复用性。
*
* this关键字
*                 this代表所在类的对象引用;记住:方法被那个类调用,this就代表那个对象
* @author zx *
*/
public class Phone {
        private String brand; //品牌
        private double price;//价格
       
        public void call(String who){//成员方法 打电话
                System.out.println("给" + who + "打电话");
        }
       
        public void sendMessage(){//成员方法 发短信
                System.out.println("群发短信");
        }
       
        public String getBrand() {
                return brand;
        }
        public void setBrand(String brand) {
                this.brand = brand;
        }
        public double getPrice() {
                return price;
        }
        public void setPrice(double price) {
                this.price = price;
        }
        public String getColor() {
                return color;
        }
        public void setColor(String color) {
                this.color = color;
        }
        private String color; //颜色
}
[mw_shl_code=java,true]package com.it.day07.Demo01;
/**
* 测试调用Phone类对象
* @author zx *
*/
public class Demo02Phone {
        public static void main(String[] args) {
                Phone phone = new Phone();
                phone.call("马云");
                phone.sendMessage();
        }
}
[/mw_shl_code][/mw_shl_code][/mw_shl_code][/mw_shl_code][/mw_shl_code]




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2