当前位置: 首页 > news >正文

Java面向对象/类和对象/封装/private/public关键字

面向对象

(写程序的套路)

为什么面对对象编程?

符合人类思维习惯,编程更简单,更好理解

面对对象重点学习什么?

学习获取已有对象并使用

学习如何自己设计对象并使用(面向对象语法)

类和对象

类是对现实生活中一类具有共同属性和行为的事物的抽象/类是对象的数据类型,类是具有相同属性和行为的一组对象的集合(设计图)

定义类

类的组成是由属性和行为两部分组成

属性:事物的特征,在类中通过成员变量来体现

行为:事物可以执行的操作,在类中通过成员方法来体现

注:如何找到实际开发项目中的属性与行为?名词--》属性  动词--》行为

/*
    手机类:
        类名:
        手机(Phone)

        成员变量:
        品牌(brand)
        价格(price)

        成员方法:
        打电话(call)
        发短信(sendMessage)
 */
public class Phone {
    //成员变量(属性)
    String brand;
    int price;

    //成员方法(行为/方法)
    public void call() {
        System.out.println("打电话");
    }

    public void sendMessage() {
        System.out.println("发短信");
    }
}

 类的分类

  • 用来描述一类事物的类,专业名称为Javabean,在Javabean中是不写main方法的,上面关于手机的代码是Javabean类
  • 编写main方法的类,叫做测试类,可以在测试类中创建javabean类的对象并进行复制调用,在学面向对象之前写的都是测试类

关于类的注意事项

  • 类名首字母大写,驼峰命名法,见名知意,不能用关键字
  • 一个Java文件中可以定义多个class类,且只有一个类是public修饰,而且public修饰的类名必须为代码文件名(实际开发中,建议一个文件定义一个class类)
  • 成员变量的格式:(修饰符) 数据类型 变量名称 = 初始化值;(一般无需指定初始化值,存在默认值)

对象

是真实存在的具体实例(客观存在的事物皆为对象,即万物皆对象)

在Java中,必须先设计类,才能获得对象


创建对象


格式:类名 对象名 = new 类名();


范例:Phone p = new Phone();

使用对象


1:使用成员变量
      格式:对象名.变量名
      范例:p.brand
2:使用成员方法
      格式:对象名.方法名()
      范例:p.call()


public class PhoneDemo {
    public static void main(String[] args) {
        //创建对象
        Phone p = new Phone();

        //使用成员变量
        System.out.println(p.brand);
        System.out.println(p.price);

        p.brand = "小米";
        p.price = 2999;

        System.out.println(p.brand);
        System.out.println(p.price);

        //使用成员方法
        p.call();
        p.sendMessage();
    }
}

类与对象的关系

  •   类:类是对现实生活中一类具有共同属性和行为的事物的抽象
  •   对象:是能够看得到摸的着的真实存在的实体
  •   简单理解*类是对事物的一种描述,对象则为具体存在的事物

封装

封装概述:是面向对象三大特征之一(封装,继承,多态)

对象代表什么,就得封装对应的数据,并提供数据对应的行为

封装的好处:降低学习成本,不用记对象有哪些方法,需要时去找就行

private/public关键字

private/public关键字可以确保正确的可以赋值,错误的无法赋值

private是一个修饰符,可以用来修饰成员(成员变量,成员方法)

 被private修饰的成员,只能在本类进行访问,针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作

针对每个私有化的成员变量,都要有get和set方法

 提供“get变量名()”方法,用于获取成员变量的值,方法用public修饰

 提供“set变量名(参数)”方法,用于设置成员变量的值,方法用public修饰

  class Student {
      //成员变量
      String name;
      private int age;
  
      //提供set方法,给成员变量age进行赋值
      public void setAge(int a) {
          if(a<0 || a>120) {
              System.out.println("你给的年龄有误");
          } else {
              age = a;
          }
      }
      //提供get方法,对外提供name属性
      public int getAge() {
          return age;
      }
  
      //成员方法
      public void show() {
          System.out.println(name + "," + age);
      }
  }
  public class StudentDemo {
      public static void main(String[] args) {
          //创建对象
          Student s = new Student();
          //给成员变量赋值
          s.name = "林青霞";
          s.setAge(30);
          //调用show方法
          s.show();
      }
  }

我们可不可以把setAge方法去掉,然后在main方法中直接判断年龄是否正确?

不可以,因为对象代表什么,就得封装对应的数据,并提供数据对应的行为,student方法封装了学生的所有属性,对属性校验的方法也必须封装在student方法中

相关文章:

  • 认识ICMP协议 —— ping命令的作用过程
  • 【Pandas总结】第七节 Pandas 合并数据集_pd.concat()
  • 【Meetup预告】OpenMLDB+37手游:一键查收实时特征计算场景案例及进阶使用攻略
  • OPTEE:TA镜像的签名和加载-上(五)
  • mysql在django中开启事务,实现悲观锁和乐观锁
  • 极限多标签学习之-PLT
  • MMDetection系列 | 5. MMDetection运行配置介绍
  • java实现顺序表
  • 【英语:基础进阶_核心词汇扩充】E5.常见词根拓词
  • 命令执行漏洞——系统命令执行
  • 【数据结构与算法】List接口栈队列
  • 将cookie字符串转成editthiscookie插件的json格式
  • SpringAOP总结
  • python--数据容器--列表
  • Roson的Qt之旅 #119 QNetworkAddressEntry详细介绍
  • 【Amaple教程】5. 插件
  • CentOS 7 防火墙操作
  • EOS是什么
  • ES6之路之模块详解
  • ES学习笔记(12)--Symbol
  • isset在php5.6-和php7.0+的一些差异
  • Javascript基础之Array数组API
  • Java到底能干嘛?
  • JS数组方法汇总
  • Koa2 之文件上传下载
  • Python语法速览与机器学习开发环境搭建
  • Sublime Text 2/3 绑定Eclipse快捷键
  • Vue2.x学习三:事件处理生命周期钩子
  • 安卓应用性能调试和优化经验分享
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 规范化安全开发 KOA 手脚架
  • 聊聊flink的BlobWriter
  • 小程序button引导用户授权
  • 如何用纯 CSS 创作一个货车 loader
  • 昨天1024程序员节,我故意写了个死循环~
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • #微信小程序:微信小程序常见的配置传值
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • ***检测工具之RKHunter AIDE
  • .net 简单实现MD5
  • .Net6 Api Swagger配置
  • .NET开发不可不知、不可不用的辅助类(一)
  • .pop ----remove 删除
  • .sys文件乱码_python vscode输出乱码
  • @德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?
  • [Angularjs]asp.net mvc+angularjs+web api单页应用
  • [AutoSar]BSW_Memory_Stack_003 NVM与APP的显式和隐式同步
  • [bbk5179]第66集 第7章 - 数据库的维护 03
  • [BJDCTF 2020]easy_md5
  • [BZOJ5125]小Q的书架(决策单调性+分治DP+树状数组)