2021-04-11

第七节 面向对象

什么是对象

面向对象思想(oop)

一切客观存在的事物都是对象,万物皆对象。
任何对象,一定具有自己的特征和行为
特征:称为属性,一般为名词,代表对象有什么
行为:称为方法,一般为动词,代表对象能做什么

程序

程序是为了模拟现实世界,解决现实问题而使用计算机语言编写的指令集合

程序中的对象

如何使用程序模拟现实世界,解决现实问题
首先:在程序当中,必须要有和现实中相同的对象,用来模拟现实世界
然后:使用程序中的对象代表现实中的对象,并执行操作,进而解决现实问题。
现实中的对象来自于模板,程序中的对象也来自于模板,这个模板就是类

什么是类

类的抽取

在一组相同或者类似的对象中,抽取出共性的行为和特征,保留所关注的部分
例如:所有的动物中抽取出共性的属性是,品种 年龄 性别 毛色 方法是,吃 睡

类的定义

class 类名{} 类名根据Pascal命名规范
属性:通过变量表示,又称实例变量,全局变量
语法:数据类型 属性名
位置:类的内部,方法的外部
方法:又称实例方法
语法:访问修饰符 public 返回值类型 方法名(形参){方法体}

对象的创建
Dog myDog=new Dog();//基于Dog类创建对象
myDog.breed="二哈";//访问属性,对象名.属性名=值(赋值)
myDog.eat();//调用方法,对象名.方法名();

类与对象的关系

一个类可以创建多个对象
类:定义了对象应具有的特征和行为,类是对象的模板
对象:拥有多个特征和行为的实体,对象时类的实例。

类的组成

实例变量

类中方法外的变量称为实例变量又称全局变量成员变量 有默认值String类型的为null int类型的为0,double类型的为0.0 boolean类型的为false。char类型的为空格,其他都为null

实例变量与局部变量的区别

1、定义位置不同
实例变量是在类中方法外,局部变量在类中的方法中或者方法内的其他结构中,
2、默认值
实例变量有默认值,局部变量没有默认值
3、适用范围
实例变量本类有效,局部变量从定义行开始到所在代码块结束,
4、命名冲突
局部变量和实例变量都不允许自身变量名相同,但是实例变量可以和局部变量名相同,优先执行局部变量

实例方法

方法的组成:访问修饰符(public private defualt package)是否静态(static)返回值类型(void或其他)方法形参(){方法体}
对象的实例方法包含两部分:方法的声明和方法的实现
方法的声明:代表对象能做什么
组成:修饰符 返回值类型 方法名(形参列表)
方法的实现:代表对象怎么做,即如何实现对应的功能
组成:{逻辑代码},用大括号包起来的

完整的类的创建

实例属性 String name int age
构造方法public 类名(){super()方法体}
实例方法public void 方法名(){方法体}

方法重载

方法重载的概念

有些情况下对象的同一种行为可能存在多种实现过程,
例如:人对象的吃的行为,吃饭和吃药的过程存在差异
到底采用那种实现过程,需要取决于调用者给定的参数

方法重载(Overload)

重载:同一个类中定义了多个相同名称的方法
要求:方法名相同,参数列表不同(形参类型,形参个数,形参顺序),与访问修饰符合返回值类型无关
调用带有重载的方法时,要根据传入的参数找到与之匹配的方法。
好处:灵活,方便,屏蔽使用差异

构造方法

构造方法概念特点

构造方法:类中的特殊方法,主要用于初始化对象,创建对象
特点:
名称与类名完全相同,
没有返回值类型
创建对象时,触发构造方法的调用,不可通过句点手动调用。
注意:
如果没有在类中定义构造方法,则编译器默认创建一个无参构造方法,如果定义了,则编译器不在默认提供。

对象创建的过程

Student s=new Student();
new Student();触发对象创建
1、在堆内存中开辟对象空间
2、为各个属性赋予初始值
3、执行构造方法中的代码
4、将对象的地址赋值给变量

对象的内存分配

Student s=new Student();
存储对象的变量s(引用)中保存对象的地址,通过变量中的地址访问对象的属性和方法。

构造方法重载

构造方法也可以重载,遵循重载和构造方法的双重规则,
构造方法 方法名和类名相同,没有返回值。
方法重载:方法名相同,参数列表不同,与返回值和访问修饰符无关。
构造方法重载;所有重载的构造方法名称相同,参数列表不同,与返回值和访问修饰符无关。
public Student(){}
public Student(String name){}
public Student(String name,int age){}

默认构造方法

在类中,如果没有自定义构造方法,则编译器默认提供一个无参的构造方法,主要用于new对象时触发构造方法执行
如果已经手动添加过构造方法,则无参构造方法不在默认提供,可根据需求自行添加
如果不自行添加,创建该类对象时会报错。

构造方法为属性赋值
class Test{
	public static void main(){
		Student s=new Studnet();
	//这样会报错,没有提供无参构造方法。
		Student s=new Studnet(“赵云”,25);
	//构造方法位属性赋值
	}
}
class  Studnet{
	public Studnet(String name ,int age){}
}

this关键字

public class TestThis{
	public static void main(){
	Student s1=new Student();
	s1.sayHi();
	Student s2=new Student();
	s2.sayHi();
	}
}
class Student{
	String name="赵云";
	ing age;
	String sex;
	double score;
	public Studnet(){
		this(name,age);//这样会形成递归调用,
	}
	public Student(String name,int age){
		this();
		this.name=name;
		this.age=age;
	}
	public Student(String name,int age,double score){
		this(name,age);
		this.score=score;
	}
	public void sayHi(){
		String name="马超";
		System.out.print(this.name);
//this关键词的第一种用法,调用本类中的实例属性,实例方法。
	}
}
this关键词第一种用法

调用实例属性,实例方法,如this.name,this.sayHi();

this关键词第二种用法

调用本类的中的其他构造方法,如this(),this(实参);

总结

什么是对象

一切客观存在的事物都是对象,万物皆对象

什么是类

类定义了对象应具有的特征和行为,类是对象的模板。对象是类的实例

什么是方法重载

方法名相同,参数列表不同

什么是构造方法

类中用于创建对象的特殊方法,名称与类名完全相同,没有返回值,不可通过句点调用

什么是this关键字

代表当前实例,通过this.访问实例成员,通过this()/this(xxx,xxx)访问本类中的其他构造方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值