嘉明的Java学习(9)之面向对象之封装

嘉明的Java学习(9)之面向对象之封装

内容:
(1)面向对象思想的描述

(2)类与对象的概述
(3)类的定义与使用
(4)手机类的定义与使用
(5)学生类的定义与使用

(1)面向对象思想的描述**

关系表:

面向对象(包括)
面向对象之封装
面向对象之继承
面向对象之多态

其中它们的关系是, 封装 是 继承 的前提,继承 是 多态 的前提

说到对象其实前面的Scanner类和Random类也是一个与对象有关的关键字

面向对象的思想?
就是把关注点放在一件事或者一个物体上的思维方式。

面向对象的 过程 思想?
就是把关注点放在一件事或者一个物体上所涉及到的动作和步骤。
比如你想喝一瓶可乐,你需要去购买一瓶可乐,然后把可乐的瓶盖拧开,最后才能喝。这就是所谓的过程

面向对象的思想特点
(1)把复杂的事情简单化(take it easy)
(2)把人从执行的地位变成指挥的地位
(3)符合人们的思考方式以及思考习惯

面对对象的程序开发无非就是 不断的 1.寻找(创建)对象 2.使用对象 3.指挥对象

面向对象的思想三大特征
1.封装(encapsulation)
2.继承(inheritance)
3.多态(polymorphism)

(2)类与对象的概述

想要准确的描述一个事物,就要从两方面着手
1.它的属性
2.它的行为

Java中是如何描述一个事物的呢?
这就是 class(类)的活啦!java中通过 class(类)来完成对事物 属性 以及 行为的概述。说白了就是 class = 一个事物的行为 + 一个事物属性

对象
某一类事物的某个具体存在,是一个具体的存在


归类是一系列具有相同行为和属性事物的统称,是一个抽象的概念

抽象
即把一系列事物共同属性和行为提取出来的过程

类与对象的关系
例如:饮料 ——》类
饮料中的可口可乐 ——》对象

(3)类的定义与使用

类 = 属性 + 行为
在java中
事物的属性 = 类中称为成员变量
事物的行为 = 成员方法

如何创建一个对象?
类名.对象名 = new 类名();

如何使用一个对象?
对象名.变量名

(4)手机类的定义与使用

需求:定义一个类名为Phone的类
属性(成员变量)
1.手机名字
2.手机型号
3.手机使用者
定义功能(成员方法)
1.玩游戏
2.拍照
3.打电话

再创建一个名为TestPhone的类
引用对象、调用方法、输出内容
第一步:这里我们可以先创建一个Phone的类来完成功能

package cn.itcast.demo;

/*
定义一个手机类
 */
public class Phone {
    //定义成员变量,在类中方法外定义,即事物的属性
    String brand;
    String model;
    String userName;

    //定义方法,不用static静态修饰,即事物功能
    public void call(String name) {
        System.out.println("打电话给:" + name);
    }

    public void playGame(String name) {
        System.out.println("打开游戏:" + name);
    }

    public void photo (){
        System.out.println("打开拍照功能");
    }
}

第二步:这个是名为TestPhone(测试类)的类,使用对象

package cn.itcast.demo;

public class TestPhone {
    public static void main(String[] args) {
         Phone p = new Phone();//使用对象
         p.brand = "华为";//给对象赋值
         p.model = "p30pro";
        p.userName = "张三";
        System.out.println("品牌为:"+p.brand);//调用方法
        System.out.println("型号为:"+p.model);
        System.out.println("使用者为:"+p.userName);
         p.call("马化藤");
         p.playGame("csgo");
         p.photo();
    }
}

结果:
在这里插入图片描述注:1.在成员方法中去掉static(局部静态)修饰符。不像以调用方法前一样。
2.充分利用idea的作用,如图点击这个分屏按钮
在这里插入图片描述就会变成这样
在这里插入图片描述方便赋值等等操作

(5)学生类的定义与使用

package cn.itcast.demo;

/*
需求:
成员变量(属性):学生姓名、学号、学生性别
成员方法(功能):谁正在学习、学生总成绩
 */
public class Student {
    String sex;
    String num;
    String name;
    String age;

    //接下来定义功能
    public void study() {
        System.out.println(name + "正在学习....");
    }

    public void mark(int x) {
        System.out.println(name + "同学的成绩为" + x);
    }
}
package cn.itcast.demo;

import java.util.Scanner;

/*
main函数是程序的主入口,所有的程序执行都要经过main函数
 */
public class TextStudent {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Student s = new Student();
        System.out.println("学生信息为:");
        s.name = "码云";
        s.age = "19";
        s.num = "201911671339";
        s.sex = "男";
        System.out.println("名字:" + s.name);
        System.out.println("性别:" + s.sex);
        System.out.println("年龄:" + s.age);
        System.out.println("学号:" + s.num);
        System.out.println("----------------");
        s.study();
        System.out.println("输入1查询该学生的总成绩");
        while (true) {
            int x = sc.nextInt();
            if (x == 1) {
                s.mark(700);
                break;
            } else {
                System.out.println("您输入的数字有误,请重新输入数字1");
                continue;
            }
        }
    }
}

结果:
在这里插入图片描述在这里插入图片描述 以下是图解(盗一波图)

两个对象创建过程中的内存图解

在这里插入图片描述步骤:(1)TestPhone的方法源文件(字节码文件)先进入方法区,然后main方法加载入栈
(2)手机类的字节码文件进入方法区进行存储,并有一个地址值
(3)执行main函数里的代码,在栈中生成一个Phone phone对象,然后从堆中new一个phone,生成一个空间并且生成一个地址值。里面分为三部分,分别有 brand和name和model和call变量属于成员变量有默认值!!!
(4)然后将堆里面phone1对象的地址赋值给栈里的phone1对象,然后根据地址进行赋值操作 注:如果对象中含有方法,那就将方法区中的地址值直接赋给它。
(5)phone2以此类推

注:方法都需要加载入栈!!!

对象作为参数的内存图解

在这里插入图片描述

前面的入栈操作大致相同,都是根据main函数一步一步延生的,重要的是,Student类是一个自定义对象也成为引用对象,当引用类对象作为参数时会返回地址值,所以Student s作为参数时会返回地址值,它会指向和stu一样的地址值,因此结果就是上图

Java中使用变量的规则

一般情况!!!使用变量遵循最近原则, 局部有先用局部,若无用成员找,若还是无,就报错或者父类找
在这里插入图片描述
看图

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值