什么是面向对象
在日常生活中,人们会关注对象,关注事物信息,关注现实存在的事物的各方面的信息。因此,面向对象,就是从对象的角度出发,根据事物的特征进行程序设计。
类和对象
类是模子,用来确定对象将会拥有什么样的特征(属性)和行为(方法)。
对象是类的实例表现。
类是对象的类型。
对象是特定类型的数据。
对象:用来描述客观事物的一个实体。
类:具有相同属性和方法的一组对象的集合。
语法:
//定义类
public class 类名 {
//定义属性部分
[访问修饰符] 数据类型 属性名;
//定义方法部分
[访问修饰符] 返回类型 方法名(参数) {
}
}
创建并引用对象
类名 对象名 = new 构造方法();
对象名.属性
对象名.方法名()
属性和方法
属性:对象具有的各种静态特征。
“对象有什么”
方法:对象具有的各种动态行为。
“对象能做什么”
类和对象的关系
类
类,是一个抽象的概念,我们可以理解为模板,用于生产实体。
对象
通过模板生成的,一个看得到、摸得着的具体实体。
包名的推荐命名规范
1、英文字母小写
2、域名的倒序
package com.pino.animal;
package com.pino.animal;
public class Cat {
//成员属性:昵称、年龄、体重、品种
String name; //String类型默认值为null
int month; // int 类型默认值为0
double weight; //double 类型默认值为0.0
String species;
//成员方法:跑动、吃东西
public void run() {
System.out.println("小猫快跑");
}
public void eat() {
System.out.println("小猫吃鱼");
}
}
package com.pino.animal;
public class CatTest {
public static void main(String[] args) {
//对象实例化
Cat one = new Cat();
//测试
one.eat();
one.run();
System.out.println("昵称:"+one.name);
System.out.println("年龄:"+one.month);
System.out.println("体重"+one.weight);
System.out.println("品种:"+one.species);
}
}
对象实例化
通过上面的 demo,我们可以总结一下,实例化对象的过程可以分为两部分:
声明对象 Cat one 会在内存的栈空间中开辟一块区域,取名为 one ,这个时候 one 指向的内容为null,我们并不能像真正的对象那样使用它。
实例化对象 new Cat(); 会在内存的堆空间中开辟一块区域,完成对象的初始化工作。通过赋值符号(=)把该堆内存地址赋值给变量 one 。
构造方法
也叫构造函数、构造器。
构造方法不能被对象单独调用,必须配合 new 关键字来使用。
注意:
1、构造方法与类同名且没有返回值。
2、构造方法的语句格式。
public 构造方法名(){
//初始化代码
}
3、只能在对象实例化的时候调用。
4、当没有指定构造方法时,系统会自动添加无参的构造方法。
5、当有指定构造方法时,无论是有参、无参的构造方法,都不会自动添加无参的构造方法。
6、一个类中可以有多个构造方法——构造方法重载
无参构造方法
通过下图,我们可以清晰看到构造方法的格式和注意事项。
成员属性的初始值
类中的成员属性,数据类型为基本类型,且没有赋值时,默认值如下图:
package com.pino.animal;
public class Cat {
//成员属性:昵称、年龄、体重、品种
String name; //String类型默认值为null
int month; // int 类型默认值为0
double weight; //double 类型默认值为0.0
String species;
public Cat() {
System.out.println("调用了无参构造方法");
}
}
package com.pino.animal;
public class CatTest {
public static void main(String[] args) {
//对象实例化
Cat one = new Cat();
}
}
/** output
调用了无参构造方法
*/
带参构造方法
this关键字
this : 当前对象的默认引用。
this的使用
调用成员属性,解决成员属性和局部变量同名冲突。
调用同一个类中的成员方法。
调用重载的构造方法。
package com.pino.animal;
public class Cat {
//成员属性:昵称、年龄、体重、品种
String name; //String类型默认值为null
int month; // int 类型默认值为0
double weight; //double 类型默认值为0.0
String species;
public Cat() {
System.out.println("调用了无参构造方法");
}
public Cat(String name, int month, double weight, String species) {
//通过this()调用构造方法必须放在方法体内第一行
this();
this.name = name;
this.month = month;
this.weight = weight;
this.species = species;
}
}
package com.pino.animal;
public class CatTest {
public static void main(String[] args) {
//对象实例化
Cat one = new Cat("乐乐", 3, 11.0, "波斯猫");
System.out.println("昵称:"+one.name);
System.out.println("年龄:"+one.month);
System.out.println("体重"+one.weight);
System.out.println("品种:"+one.species);
}
}