JavaSE基础入门_007_面向对象
什么是对象
什么是程序
-
程序是为了模拟现实世界,解决现实问题而使用计算机语言编写的指令集和.
实现世界的组成
-
世界是由什么组成的?
-
有人说: "世界是由无数原子组成的"
-
有人说: "世界是由无数事物组成的"
-
有人说: "世界是由无数物体组成的"
-
.......
-
-
在程序员的眼里, 世界的组成最为明确: "世界是由无数个对象组成的"
什么是对象
-
面向对象思想(Object Oriented Programming)
-
一切客观存在的事物都是对象, 万物皆对象.
-
任何对象, 一定具有自己的特征[有什么]和行为[能做什么].
-
特征: 称为属性, 一般为名词, 代表对象有什么.
-
行为: 称为方法, 一般为动词, 代表对象能做什么.
-
-
现实中的对象
-
手机:
-
属性: 材料, 屏幕亮度, 品牌, 价格.....
-
方法: 打电话, 发短信.....
-
程序中的对象
-
如何使用程序模拟现实世界, 解决现实问题 ?
-
首先, 在程序中, 必须具有和显示中相同的对象, 用以模拟现实世界.
-
然后, 使用程序中的对象代表现实中的对象, 并执行操作, 进而解决现实问题 .
-
-
现实中的对象多数来自于"模板", 程序中的对象也应该具有"模板".
什么是类
-
等价于现实对象的"模板".
-
程序中的模板称为"类", 按照"类"创造出来的实体, 就是程序中的对象.
类的抽取
-
在一组相同或类似的对象中, 抽取出共性的特征和行为, 保留所关注的部分.
-
具体操作:
-
明确现实中的对象
-
抽取共性(一组相同或类似的对象中)
-
程序中定义模板(类)
-
创建程序中的对象(实例)
-
用程序中的对象模拟(代表)现实中的对象
-
类的组成
类的定义
public class Dog // 类名
{
String breed; //属性: 通过变量表示, 又称实例变量
int age; //语法: 数据类型 属性名;
//位置: 类的内部, 方法的外部
public void eat() //方法: 通过函数表示,又称实例方法
{ //语法:
System.out.println("eatting"); //public 返回值 方法名(形参){//方法主体} 不写static
}
}
-
一个类[模板]定义出来, 就是一种类型.
对象的创建
public class TestObject // 测试类
{
public static void main(String[] args)
{
//数据类型 变量名 = 值;
Dog myDog = new Dog(); // 基于Dog类创建对象
myDog.breed = "Hasiki"; // 访问属性: 对象名.属性名 = 值; // 赋值
System.out.println(myDog+"\t"+myDog.breed); // 访问属性: 对象名.属性名; //取值
}
-
将对象保存在相同类型的myDog变量中, myDog变量称为"对象名"或"引用名"
类与对象的关系
类: 模板 ( 一个 ) =======创建========>> 对象: 实例 ( 多个 )
-
类: 定义了对象应该具有的特征和行为, 类是对象的模板
-
对象: 拥有多个特征和行为的实体, 对象是类的实例
实例变量与局部变量的区别
局部变量 | 实例变量 | |
---|---|---|
定义位置 | 方法或方法内的结构当中 | 类的内部, 方法的外部 |
默认值 | 无默认值 | 字面值(同数组类型的默认值) |
使用范围 | 从定义行到包含其结构结束 | 本类有效 |
命名冲突 | 不允许重名 | 可与局部变量重名, 局部变量优先 |
实例方法
-
对象的实例方法包含两部分: 方法的声明和方法的实现
-
方法的声明:
-
代表对象能做什么
-
组成: 修饰符 返回值类型 方法名(形参列表)
public void sleep(int hour) // 声明
{
System.out.println("休息"+hour+"小时"); // 实现
}
-
-
-
方法的实现:
-
代表对象怎么做: 即如何实现对应的功能
-
组成: {}
-
方法重载
-
有些情况下, 对象的同一种行为可能存在多种实现过程.
-
例如: 人对象的吃行为, 吃饭和吃药的过程就存在差异.
-
重载(Overload): 一个类中定义多个相同名称的方法
-
要求:
-
方法名称相同
-
参数列表不同(类型, 个数, 顺序)
-
与修饰符, 返回值类型无关
-
-
调用带有重载的方法时, 需要根据传入的实参去找到与之匹配的方法
-
好处: 屏蔽使用差异, 灵活, 方便
构造方法
-
构造方法: 类中的特殊方法, 主要用于创建对象
-
特点:
-
名称与类名完全相同(包括大小写)。
-
没有返回值类型。
-
创建对象时,出发构造方法的调用,不可通过句点手动调用。
-
//无参构造方法:
public Student()
{
System.out.println("Student()");
}
-
-
注意:如果没有在类中显示定义构造方法,则编译器默认提供无参构造方法。
对象创建过程
-
对象的创建过程:
-
内存中开辟对象空间
-
为各个属性赋予初始值
-
执行构造方法中的代码
-
[将对象的地址赋值给变量] // [ ]: 内容有时可省
-
构造方法重载
-
构造方法也可重载, 遵循重载规则.
-
public Teacher()
{
System.out.println("--------Teacher() Executed-------");
}
public Teacher(String name)
{
System.out.println("--------Teacher(String name) Executed-------");
} -
创建对象时, 根据传入参数, 匹配对应的构造方法.
-
如果自己已经定义了一个构造方法, 则系统不再提供默认的无参构造方法.
构造方法为属性赋值
Teacher t2 = new Teacher("Jerry",28,"male",5666D);
this关键字
-
类是模板, 可服务于此类的所有对象;
-
this是类中的默认引用, 代表当前实例; ( 指向当前实例的地址 )
-
当类服务于某个对象时, this则指向这个对象
-
当局部变量与实例变量重名时, 用this关键字做区分
-
this第一种用法: 调用当前实例属性、当前实例方法。如:this.name、this.sayHii()
-
this第二种用法:调用本类中的其他构造方法。如:this()、this(实参);解决代码冗余
-
public Student(String name,int age,String sex)
{
this.name = name;
this.age = age;
this.sex = sex;
}
public Student(String name,int age,String sex,double score)
{
this(name,sex,score);
this.score = score;
} -
注意:在本构造方法用this()语句调用其他构造方法,this()语句必须放在本方法第一行
-
this( ):调用无参构造;this(实参):调用实参构造
-
级联调用并不会创造新实例,只有在 new 实例的时候才会创建
-
总结
-
什么是对象:
-
一切客观存在的事物都是对象,万物皆对象
-
-
什么是类:
-
定义了对象应具有的特征和行为,类是对象的模版
-
-
什么是方法重载:
-
-
什么是构造方法:
-
类中用于创建对象的特殊方法,名称与类名相同,没有返回值,不可通过句点调用
-
-
什么是this关键字:
-
代表当前实例,通过 this.
-