千锋学习day09面向对象
面向对象
面向对象
面向对象思想(Object Oriented Programming )OOP:
- 一切客观存在的事物都是对象,万物皆对象
- 任何对象,一定具有自己的特征和行为
对象:
特征:称为属性,一般为名词,代表对象有什么
行为:称为方法,一般为动词,代表对象能做什么
现实中的对象
手机:有品牌、颜色、价格、重量 能打电话、发短信
车:有品牌、颜色、型号、产地 能前进、后退
程序中的对象
如何使用程序模拟现实世界,解决现实问题?
1、首先,在程序当中,必须具有和现实中相同的对象,用以模拟现实实际
2、然后,使用程序中的对象代表现实中的对象,并执行操作,进而解决现实问题
现实中的对象多数来自于"模板",程序中的对象也应该具有"模板"
什么是类
程序中的模板 Java的基本编程单元是类
通过程序中的模板创造出来的实体,即为程序中的对象
类的抽取
在一组相同或类似的对象中,抽取出共性的特征和行为,保留所关注的部分
类的定义
public class Dog{//类名String breed;//品种int age;//年龄String sex;//性别String furColor;//毛色public void eat(){System.out.println("eating....");}public void sleep(){System.out.println("sleeping....");}
}
属性:通过变量表示,又称实例变量
语法:数据类型 属性名;
位置:类的内部,方法的外部
方法:通过方法表示,又称实例方法
语法:
publi 返回值类型 方法名(形参){
//方法的主体
}
注意:不再书写static
对象的创建
public static void main(String[] args) {/** 将对象保存在相同类型的myDog变量中, myDog变量称为"对象名"或"引用名"**/Dog myDog = new Dog();// 基于Dog类创建对象// 访问属性: 对象名.属性名 = 值;//赋值myDog.breed = "萨摩";myDog.age = 2;myDog.sex = "公";myDog.furColor = "白色";// 访问属性: 对象名.属性名;//取值System.out.println(myDog.breed + "\t" + myDog.age + "\t" + myDog.sex + "\t" + myDog.furColor + "\t");//调用方法:对象名.方法名();myDog.eat();myDog.sleep();
}
类与对象的关系
类:定义了对象应具有的特征和行为,类是对象的模板 类是对象的抽象
对象:拥有多个特征和行为的实体,对象是类的实例
实例变量
对于实例变量而言,为赋值并不会编译错误。
实例变量的默认值:
整数:0
小数:0.0
字符:\u0000(空格)
布尔:false
其他:null
实例变量与局部变量的区别
局部变量 | 实例变量 | |
---|---|---|
定义位置 | 方法或方法内部的结构当中 | 类的内部、方法的外部 |
默认值 | 无默认值 | 字面值(与数组相同) |
使用范围 | 从定义行到包含其结构结束 | 本类有效 |
命名冲突 | 不允许与局部变量重名 | 不允许与实例变量重名,可与局部变量重名,局部变量优先 |
实例方法
对象的实例方法包含两部分:方法的声明和方法的实现
方法的声明:
- 代表对象能做什么
- 组成:修饰符 返回值类型 方法名(形参列表)
方法的实现:
- 代表对象怎么做:即如何实现对应的功能
- 组成:{逻辑代码}
课堂案例
方法重载的概念:
有些情况下,对象的同一种行为可能存在多种实现过程
例如:人对象的"吃"行为,吃饭和吃药的过程就存在差异
到底采用哪种实现过程,需要取决于调用者给定的参数
方法重载
重载(Overload):一个类定义多个相同名称的方法
要求:
- 方法名相同
- 参数列表不同(类型、个数、顺序)
- 与访问修饰符、返回值类型无关
调用带有重载的方法时,需要根据传入的实参去找到与之匹配的方法
好处:灵活、方便、屏蔽使用差异
代码调错
两个方法的方法名称和参数列表都相同,只要参数名称不一样,编译报错
注意:只是参数名称不同,并不能构成方法的重载
构造方法
构造方法:类中的特殊方法,主要用于创建对象
特点:
- 名称与类名完全相同
- 没有返回值类型
- 创建对象时,触发构造方法的调用,不可通过句点手动调用
注意:如果没有在类中显示定义构造方法,则编译器默认提供无参构造方法
创建对象的过程
new Student(); 触发对象创建
对象的创建过程:
- 内存中开辟对象空间
- 为各个属性赋予初始值
- 执行构造方法中的代码
- [将对象的地址赋值给变量]
对象的内存分配
存储对象的变量(引用)中保存对象的地址,通过变量中的地址访问对象的属性和方法
构造方法重载
构造方法也可重载,遵循重载规则
创建对象时,根据传入的参数,匹配对应的构造方法
默认构造方法
在类中,如果没有显示定义构造方法,则编译器默认提供无参构造方法
如已手动添加有参构造方法,则无参构造方法不再默认提供,可根据务求自行添加
经验:虽然编译器会默认提供无参构造 但是还是每一次都添加上无参构造
this关键字
类是模板,可服务于此类的所有对象;
this是类中默认引用,代表当前实例;
当类服务于某个对象时,this则指向这个对象
this的第一种用法
调用实例属性、方法
当实例变量和局部变量重名时,优先访问局部变量;此时,如需访问实例变量,
需要增加this.前缀。不存在重名时,则可以省略
public class T2 {public static void main(String[] args) {Student s1 = new Student();s1.sayHi();}}class Student {String name = "tom";public void sayHi() {String name = "jack";System.out.println(name);System.out.println(this.name);}
}
this的第二种用法
调用本类中的其他构造方法 如:this()、this(实参)
在构造方法中,调用本类的其他构造方法,即可复用构造方法中的逻辑代码
this():调用无参构造
this(实参):调用有参构造
注:必须在构造方法的首行
总结
什么是对象
一切客观存在的事物都是对象,万物皆对象
什么是类
定义了对象应具有的特征和方法,类是对象的模板
什么是方法重载
方法名相同、参数列表不同
什么是构造方法
类中用于创建对象的特殊方法,名称与类名相同,没有返回值,不可通过句点调用
什么是this关键字
代表当前实例,通过this.访问实例成员;
通过this()/this(xxx)访问本类中的其他构造方法
千锋学习day09面向对象相关推荐
- 千锋学习的33天:网络编程
千锋学习 千锋学习的33天:网络编程 一.填空 TCP和UDP 都是传输层协议,TCP是_(有链接)的协议,UDP是(无连接)_的协议,这两种协议中,__(TCP)_协议更安全,而_UDP_传输效率更 ...
- #千锋逆战班,王富胜# 学如逆水行舟,不进则退。在千锋学习的第14天 笔记整理
1.Servlet:是服务器端程序,作用是实现前后台交互.本质是一种特殊Java程序. 2.Servlet家族系谱图: 3.手动创建Servlet: 3.1:创建一个java类,让这个java类继承或 ...
- 千锋学习day15day16常用类
内部类 内部类的分类 内部类分为:成员内部类.静态内部类.局部内部类.匿名内部类 什么是内部类 概念:在一个类的内部再定义一个完整的类 特点: 编译之后可生成独立的字节码文件 内部类可直接访问外部类的 ...
- 数据库MYSQL详细教程----千锋学习笔记
目录 目录 -.引言 1.1现有的数据存储方式有哪些? 1.2以上存储方式存在哪些缺点? 二.数据库 2.1概念 2.2数据库的分类 三.数据库管理系统 3.1概念 3.2常见数据库管理系统 四.My ...
- 2021-10-21千锋教育学习日志
我叫牛牛,这是我在千锋学习的第二个礼拜. 今天是十月二一号了,昨天晚上还是开空调的天气,今天就已经瞬间降温还下起了下雨,这不免让我的心情更加难过了一分,因为我们java班唯三的女生走了一个,三朵金花也 ...
- 一张图带走一套操作 分享最新网络营销学习路线图-千锋
一张图带走一套操作 分享最新网络营销学习路线图-千锋 学习网络营销,进入互联网行业是一个不错的选择,但是,有很多新手自学网络营销时,根本不知道从哪儿入手学习,怎么系统性地学习.网络营销岗位的薪资高.就 ...
- 千锋逆战班学习的第17天,final
千锋学习的第17天今天学习的是 三大修饰符final中国加油,武汉加油. 七(final属性的初始化)有如下代码 1) class MyClass{ 2) final in value; 3) pub ...
- 大学python实训总结-千锋Python实训总结 学好基础才能走的更远
时间飞逝,不知不觉在千锋学习Python已经一个月了,在这不长不短的一个月时间感觉我以往的生活方式和学习方式完全被改变了,希望我能继续保持这样的求学心态和学习态度.下面这个Python实训总结就是我对 ...
- 千锋逆战班,css注册案例
千锋学习的第四十八天, 不积跬步无以至千里,不积小流无以成江河: 注册案例代码: <!DOCTYPE html> <html><head><meta char ...
最新文章
- SAP MM已经转成PO的采购申请Item依旧可以被删除?
- 对象类什么是面向对象(1)
- 定义ComboBox(下拉列表)组件垂直滚动条的样式。
- python使用正則表達式
- 在Window Embedded CE(Wince)下使用OpenNETCF进行路由表的开发
- 每周学算法/读英文/知识点心得分享 2.25 - 3.1
- PS效果教程——冒充手绘效果
- the NTP socket is in use, exiting
- JavaScript中的运算符
- goldengate for mysql_GoldenGate for mysql to mysql:单向同步
- 谷歌大脑发布神经架构搜索新方法:提速1000倍
- Django中的admin
- L2-007 家庭房产 (25 point(s))
- 数据分析 回归问题:北京PM2.5浓度回归分析训练赛
- Laravel 消息通知使用 EasySms 短信包插件
- vue单文件组件导入导出
- 旖旎风景——浪漫烟花(Python实现)
- Elo第四代触摸一体机发布,助力全场景数字化转型
- 三门问题的计算机模拟,三门问题和 JavaScript 仿真实验
- [清华集训2015 Day1]玛里苟斯-[线性基]