面向对象概述/private、this关键字和封装/面向对象之构造方法/面向对象三大特征之封装

一、面向过程和面向对象思想概述

什么是面向过程?什么是面向对象?面向对象思想的好处是什么?
        1. 面向过程强调的是过程, 通过第一步, 第二步, 第三步...一步步的去实现功能.
        2. 面向对象强调的是对象, 我们只需要指挥对象去完成对应的功能即可.
        3. 
            1. 面向对象是一种思想, 是一共更符合我们人类思考问题的一种习惯
            2. 将复杂的问题简单化
            3. 将我们从执行者的位置变成了指挥者.

            万物皆对象.

二、类和对象的概述

如何通过java描述现实生活中事物?

    java描述现实生活中的任何一种事物, 都是通过类的形式进行描述

类是由什么组成的?
            A. 属性    --> 事物的特征
            B. 行为    --> 事物具体能做的事情
类和对象的关系是什么?
    我们可以将类看做为一个模子, 或者说是一张设计图纸, 根据图纸去创建具体存在的事物.
                类就是一张图纸, 对象则是具体存在的事物.
                结论: 我们可以通过类去创建对象.

            概念: 类一组相关属性和行为的集合, 对象就是具体要操作的事物.

属性和行为分别用什么表示?
            属性: 成员变量
            行为: 成员方法
            成员变量: 跟之前定义变量的格式的一样, 只不过位置发生了改变, 在类中方法外.
            成员方法: 跟之前定义方法的格式一样, 只不过去掉了static关键字

创建对象的格式?        

        1. 类名 对象名 = new 类名();

如果调用对象中的属性?

        2. 对象名.属性名;

如何调用对象中的行为?

        3. 对象名.方法名();


垃圾回收机制

        Java语言有完善的垃圾回收机制, 会在不定时的时候对内存中的垃圾进行清扫

什么是内存中的垃圾?
            
        当一个对象的地址值没有任何一个引用记录住的时候, 那么此对象就会变成垃圾

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

         A:位置不同
             成员变量:在类中方法外
              局部变量:方法中或者是方法的声明上
         B:初始化值不同
              成员变量:有默认初始化值 
              局部变量:没有默认初始化值, 使用之前必须完成赋值才能使用
          C:生命周期不同
             成员变量:随着对象的创建而存在, 随着对象的消失而消失. 
              局部变量:随着方法的调用而存在, 随着方法的弹栈而消失.
          D:内存位置不同
             成员变量:因为成员变量所属于对象, 堆内存
             局部变量:所属于方法, 栈内存

        E: 作用域不同(编写代码)
            成员变量: 作用域范围在整个类当中.
            局部变量: 仅在它所在的那对儿大括号中有效.

四、private关键字的概述和特点

private权限修饰符可以修饰什么?

        成员.(成员变量, 成员方法)

被其修饰的(成员)有什么特点?

        只能在本类中进行访问

setXxx和getXxx方法一定要成对儿出现吗?

        不一定, 需要根据具体的业务去组织.


五、封装的概述和好处

概述下什么是封装?
        隐藏实现细节, 仅对外暴露公共的访问方式.

        原则: 将不需要对外提供的内容都隐藏起来.

封装的好处又是什么?

            A. 提高了代码的安全性
            B. 提高了代码的复用性.
                封装实际上是一种思想.
                    1. 将部分代码抽取到方法中, 这是对代码的封装
                    2. 将现实事物的数据编写成一个类, 这是对数据的封装.

六、this关键字的概述和使用

什么是this关键字

        this代表当前对象的引用, 谁来调用我, 我就代表谁.

this关键字的作用是什么?

        用于区分局部变量和成员变量重名的问题.

七、构造方法的概述和使用

什么是构造方法?

        构造方法就是在构建或者说是创造一个对象的时候, 调用的方法.
            换句话说, 没有构造方法则不能创建对象

构造方法的格式为?

            A. 构造方法的名字跟类名相同, 大小写也要一致
            B. 构造方法没有返回值类型, 连void都没有
            C. 构造方法没有具体的返回值

构造方法可以有return语句吗?

            可以, 但是retrun后面不能跟上具体的值.

构造方法在什么时候被调用? 能不能手动调用?

            在每一次创建对象的时候, 都会由系统自动调用, 不能手动调用!    

构造方法的作用是什么?

            用于给对象中的属性进行初始化的(在创建对象的时候, 就给属性初始化)

八、构造方法的注意事项

构造方法注意事项?
            如果一个类中, 没有给出任何构造方法, 那么系统将会默认提供一个空参数的构造方法
            但是, 如果手动给出了构造方法, 那么系统将不会再给出空参构造了
            建议, 今后编写JavaBean类的时候, 空参有参构造方法都手动给出.
构造方法能够重载吗?

            构造方法也是方法, 可以构成重载.

给成员变量的两种初始化方式有什么区别?

            1. 通过setXxx赋值

            2. 通过构造方法赋值.

            总结: 有参构造是用于初始化的, setXxx方法是修改数据的.

                    往往两者是配合使用

练习:

分析以下需求,并用代码实现

         1.项目经理类Manager

                  属性:

                          姓名name

                          工号id

                          工资salary

                          奖金bonus

                  行为:

                          工作work()

         2.程序员类Coder

                  属性:

                          姓名name

                          工号id

                          工资salary

                  行为:

                          工作work()

         要求:

                  1.按照以上要求定义Manager类和Coder类,属性要私有,生成空参、有参构造,setter和getter方法

                  2.定义测试类,在main方法中创建该类的对象并给属性赋值(演示两种方法:setter方法和构造方法)

                  3.调用成员方法,打印格式如下:

                          工号为123基本工资为15000奖金为6000的项目经理一龙正在努力的做着管理工作,分配任务,检查员工提交上来的代码.....

                          工号为135基本工资为10000的程序员方便正在努力的写着代码......

public class Ex01 {
	public static void main(String[] args) {
		E01_Coder c = new E01_Coder("张三", "a001",10000);
		c.work();
		E01_Manager m = new E01_Manager("李四", "a002", 15000, 3000);
		m.work();
	}
}

class E01_Manager{
	private String name;
	private String id;
	private double salary;
	private double bonus;
	public E01_Manager() {
		super();
	}
	public E01_Manager(String name, String id, double salary, double bonus) {
		super();
		this.name = name;
		this.id = id;
		this.salary = salary;
		this.bonus = bonus;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public double getSalary() {
		return salary;
	}
	public void setSalary(double salary) {
		this.salary = salary;
	}
	public double getBonus() {
		return bonus;
	}
	public void setBonus(double bonus) {
		this.bonus = bonus;
	}
	
	public void work() {
		System.out.println("工号为"+id+"基本工资为"+salary+"奖金为"+bonus+"的项目经理正在努力的做着管理工作,分配任务,检查员工提交上来的代码....");

	}
}

class E01_Coder{
	private String name;
	private String id;
	private double salary;
	
	public void work(){
		System.out.println("工号为"+id+"基本工资为"+salary+"的程序员方便正在努力的写着代码......");
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public double getSalary() {
		return salary;
	}
	public void setSalary(double salary) {
		this.salary = salary;
	}

	public E01_Coder(String name, String id, double salary) {
		super();
		this.name = name;
		this.id = id;
		this.salary = salary;
	}

	public E01_Coder() {
		super();
	}
	
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值