第七节 面向对象
什么是对象
面向对象思想(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)访问本类中的其他构造方法。