六、面向对象编程——类和对象
两种编程范式比较
一、面向过程程序设计
在面向对象程序设计以前,使用的都是面向过程程序设计,采用的是“自上而下”“步步求精”的编程思想,将程序一步一步的分解,并且按照一定的顺序执行,这就是面向过程程序设计,以过程为中心,以算法为驱动
程序 = 算法 (可由顺序、选择、循环三种结构控制)+ 数据结构
但是面向过程程序设计这种范式,一旦程序的规模巨大,代码量大的时候,在编程和维护上十分困难。十分不利于维护,并且一旦出现需求改动,在代码上因为“步步求精”程序一环扣一环,这时候维护代码的代码是十分巨大的
二、面向对象程序设计
为了解决面向过程程序设计语言的弊病,出现了面向对象程序设计范式
程序 = 对象 + 消息传递
用户先自定义需要使用的——类,在类中定义属性,和方法(行为),然后创建出对象,在该类型下的对象下组装程序,对象间通过消息传递,这时候一旦程序出现需求变动,需要修改,这时候可能仅仅只需要修改当前的类即可。但是,当程序规模不大的时候,这时候面向对象程序设计范式的效率却会比面向过程程序设计范式低
面向对象的基本概念
一、类(class)
将相同属性和相同行为的一组对象称为类,即具有共同特质的事务的集合就可以称为类,在面向对象程序设计中类是一个独立的单位,有着自己的类名
而一个完整的类包含:
成员属性:用来描述对象的属性
成员方法:用来描述对象的行为
类是一个比较抽象的数据类型,它的使用往往需要用到实例即对象
二、对象
对象是类的实例化的结果,一个类可以有实例化出多个对象,但每个对象的属性值确不一定相同,举个例子
一个类——人类,而实例化的对象有小明,小红。下面用代码给大家展示一下,类的定义,和对象的实例化
详细讲解在文章下面跟着
1.先创建一个类People
我们给人这个类添加名字,年龄两个属性
给这个类赋予说话这个行为,让他能够自我介绍
package test;public class People {//定义了两个成员属性private String name;private int age;//定义无参构造函数public People(){}//定义了有参构造函数public People(String name, int age) {super();this.name = name;this.age = age;}//定义属性的getter\setter方法,实现对属性的复制和取值public String getName() {return name;}public int getAge() {return age;}public void setName(String name) {this.name = name;}public void setAge(int age) {this.age = age;}//定义人类的一个talk行为public void talk(){System.out.println("我的名字叫"+this.name+",今年"+this.age+"岁");}public static void main(String[] args) {//使用无参构造器创建一个对象p1People p1 = new People();//使用有参构造器创建一个对象p2,并且进行初始化赋值People p2 = new People("小红", 18);//调用getter\setter方法对小明进行初始化赋值p1.setName("小明");p1.setAge(20);//调用talk()方法,让他们都执行自己的行为p1.talk();p2.talk();}}
1.private、public,这是java语言的访问控制符,java访问控制方式一共有四种,而最常用的就是这两种
private表示私有的,一般用于属性的定义,我们在定义一个类的时候,通常都会提供public修饰的getter()\setter()方法,我们不希望别人可以直接通过对象就取得值,并且对我们的值修改,而是通过我们提供的getter()\setter()方法进行对属性值的修改,这是程序安全性的问题,这里只用大家记住一点先就行,属性一般用private修饰,而方法一般使用public修饰
2.无参构造器,有参构造器
作用:首先构造器的定义一般都会在类的定义里的头几行,大家需要记住很重要的一点,构造器的存在就是为了给对象的初始化使用的
定义方法:
无参构造器定义: public 类名(){
}
有参构造器定义: public 类名(数据类型 属性名1,数据类型 属性名2....){
super();
this.属性名1 = 属性名1
this.属性名2 = 属性名2
}
使用的方法:
无参构造器直接new一个就行
类名 对象名 = new 类名();
有参构造器在new的时候,记得还需要传参数哦,而且顺序不能乱
类名 对象名 = new 类名(属性值1,属性值2);
3.new关键字
new关键字,是java中用来创建对象使用的,它的作用是在内存空间中开辟一个存储空间用来存放对象的属性值,大家暂时只用记住new关键字是用来创建对象用的即可
4.this.属性名
上面大家看到
this.name = name;
this关键字的作用,这里就告诉大家一个说法先,你们可以这么理解 this.属性名 = 属性名,表示当前对象的属性值 = 属性值(传进来的值)。
5.super()
这个super关键字,一般会在你写了有参和无参构造器的时候才会用的上,怎么说呢?是这样的
当你有了有参构造器,并且调用了,如:
People p2 = new People("小红", 18);
实际上,它不仅走了有参构造器,还会走无参构造器,怎么走?就是通过super();传过去的,这里先记得是这样使用的就行,有个印象和理解,往后章节会补充解释
6.方法的使用
因为我们使用的是public访问控制符修饰的方法,所以我们可以通过对象名.方法名()即可调用方法,如:
p2.talk();
六、面向对象编程——类和对象相关推荐
- 面向对象编程——类和对象
面向对象编程 类和对象 类(Class):用来描述具有相同属性和方法的对象的集合 class Student:name='stu'#属性def say(self):#方法print("hel ...
- python多个对象调用类方法、且之间有联系_趣味解读Python面向对象编程 (类和对象)...
一.面向对象简介 考虑现实生活中,我们的思维方式是放在学生这个个人上,是学生做了自我介绍.而不是像我们刚刚写出的代码,先有了介绍的行为,再去看介绍了谁. 用我们的现实思维方式该怎么用程序表达呢? 面向 ...
- JAVA300集——面向对象编程-类和对象-构造方法及其重载-方法调用
本章概述 "如何开车":(由多个步骤组成),简单问题,可以使用面向过程. "如何造车":(成千上万个零件,细节很多),复杂问题,宏观上用面向对象把握,微观操作用 ...
- python面向对象图片_趣味解读Python面向对象编程 (类和对象)
一.面向对象简介 考虑现实生活中,我们的思维方式是放在学生这个个人上,是学生做了自我介绍.而不是像我们刚刚写出的代码,先有了介绍的行为,再去看介绍了谁. 用我们的现实思维方式该怎么用程序表达呢?面向过 ...
- Day16:面向对象编程——类和对象
一.面向对象的程序设计 在此之前用到的事面向过程的程序设计,它的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比设计好一条流水线,考虑周全什么时候处理什么东西. 优点:极大的降低 ...
- 【Android开发日志】Kotlin 面向对象编程 - 类与对象(11)
Android Studio 4.0已发布,此教程已更新至4.0版本. 面向对象,顾名思义,一定得是"对象",生活当中的人.电脑.等任何事物,他们都有各自的属性,我们编程里把这些属 ...
- Python零基础速成班-第9讲-Python面向对象编程(上),对象和类、初始化、继承、重写、多态、类方法、组合
Python零基础速成班-第9讲-Python面向对象编程(上),对象和类.初始化.继承.重写.多态.类方法.组合 学习目标 修饰器 面向对象编程:对象和类.初始化.继承.重写.多态.类方法.组合 课 ...
- 【JAVA学习】2、面向对象编程的核心——对象和类
[JAVA学习]面向对象编程的核心--对象和类 前言 面向过程VS面向对象 基础概念 优缺点比较 面向对象三大基础特性 封装 继承 多态 面向对象编程的五大基本原则 单一职责原则SRP(Single ...
- Python中的面向对象编程(类编程)由简单到复杂的示例代码
关于本文代码中的self的含义,大家可参考下面这篇博文: https://blog.csdn.net/wenhao_ir/article/details/125384347 另:说明一下,本博文中&q ...
- python【面向对象(类和对象)】
1.面向对象(类和对象) 1.编程思维 根据面对问题不同人呈现出来的思维模式不同,可以将编程思维分为三种: 1.面向过程编程(穷人思想)-- 会基本的逻辑和语法(遇到问题马上想到的是解决问题的具体逻辑 ...
最新文章
- 详解AI加速器(最终篇):给想进入赛道的玩家一些建议
- buildroot 简要记录
- Handler消息机制(八):Handler内存泄漏的场景有哪些,如何避免
- HTTPSConnectionPool(host=‘files.pythonhosted.org‘, port=443): Read timed out的解决方法
- 客户端实时获取Oracle数据库服务器端的系统时间
- 15张Vim速查表-帮你提高N倍效率
- 前端学习(1333):mongodb增
- [数据结构] Link Cut Tree
- HTMLTestRunner文件
- 分享:如何在线将两个PDF合并成一个
- 前言,flutter页面切换动画
- 【UE5】AI随机漫游蓝图两种实现方法(角色蓝图、行为树)
- EPS主要逻辑网元功能
- 解决ntp的错误:no server can be used,exiting
- resulful规范_resultful风格接口
- Ubuntu 下查看DNS地址
- 全国计算机考试一的书,《全国计算机等级考试全能教程》—甲虎网一站式图书批发平台...
- 怎样用python定位别人在哪_python程序员教你用微信给对方定位!你说回家!却还在外面鬼混?...
- Linux系统Shell脚本第五章:shell数组、正则表达式及文件三剑客之AWK
- Response重定向
热门文章
- UISearchBar背景透明,去掉背景,自定义背景
- 拓端tecdat|MATLAB中的马尔可夫区制转移(Markov regime switching)模型
- 拓端tecdat|用RSHINY DASHBOARD可视化美国投票记录
- TypeError: ‘RClass‘ object is not callable, TypeError: ‘CClass‘ object is not callable
- 城市间紧急救援 (25 分)(Dijkstra)
- 戴尔服务器t330可以用无线网卡吗,DELL T330服务器安装windows2008R2系统
- Android入门笔记03
- pandas获取符合条件值的索引
- pandas获取某行数据
- model.load_state_dict(checkpoint[‘state_dict‘]) KeyError: ‘state_dict‘