前言
面向对象编程的特性:封装,继承,多态
在Java中,最基本的封装单元是类,一个类的定义为具有相似特征对象的一种抽象,根据类的继承,父类只定义各子类所需的属性和方法,多态是类中同一名称的行为,可以有多种不同的功能
一,类的定义
1,定义成员变量
定义格式:
[修饰符] 类型 成员变量名列表;
类中所有方法可直接访问成员变量,成员变量修饰符(public,protected,private,final,static)
例如
// 创建类
class <class_name>{
field;//成员属性
method;//成员方法
}
注:class为定义类的关键字,Class-name为类的名字,{}中为类的主体。
类中的元素称为:成员属性。类中的函数称为:成员方法
2,定义成员方法
定义格式:
[修饰符] 返回值类型 方法名(参数列表)
{
方法体
}
例如定义点point和基本方法:
class point {//点类
int x =0;
int y =0;
public void move(int dx ,int dy)//定义移动点坐标方法
{
x = x + dx;
y = y + dy;
}
注意事项
使用 . 访问对象的字段.
“访问” 既包含读, 也包含写.
对于一个对象的字段如果没有显式设置初始值, 那么会被设置一个默认的初值
二,对象的创建和使用
1,实例化对象
用类类型创建对象的过程,称为类的实例化
1.类只是一个模型一样的东西,限定了类有哪些成员.
2. 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量
3. 做个比方。类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东
西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间
语句格式:
类名 对象名 = new 类名(参数列表);
class Person {
public int age;//成员属性 实例变量
public String name;
public String sex;
public void eat() {//成员方法
System.out.println("吃饭!");
}
public void sleep() {
System.out.println("睡觉!");
}
}
public class Main{
public static void main(String[] args) {
Person person = new Person();//通过new实例化对象
person.eat();//成员方法调用需要通过对象的引用调用
person.sleep();
//产生对象 实例化对象
Person person2 = new Person();
Person person3 = new Person();
}
}
2,关键字new为对象分配一片内存区域,并返回该对象的引用
比较s1和s2
Student s1 =new Student ();
Student s2 =new Student ();
s1 == s2;//false,比较s1,s2的地址
s1.equals(s2);//比较s1,s2的值
3,初始化对象
直接对成员变量赋初值
String name ="zhangsan";
利用构造方法初始化对象
class Student {
int no;
String name;
//构造方法
Student(int no1,String name1){
this.no =no1;//no和name初始化
this.name = name1;
}
4,使用对象
格式如下:
对象名.成员变量名;
对象名.成员方法名(实参列表);
三,构造方法的定义和使用
1,基本语法
构造方法是一种特殊方法, 使用关键字new实例化新对象时会被自动调用, 用于完成初始化操作.
(1)new 执行过程
①为对象分配内存空间
②调用对象的构造方法
(2)语法规则
1.方法名称必须与类名称相同
2.构造方法没有返回值类型声明
3.每一个类中一定至少存在一个构造方法(没有明确定义,则系统自动生成一个无参构造)
(3)注意事项
如果类中没有提供任何的构造函数,那么编译器会默认生成一个不带有参数的构造函数
若类中定义了构造方法,则默认的无参构造将不再生成.
构造方法支持重载. 规则和普通方法的重载一致
2,构造方法使用
构造方法是特殊方法,完成对象初始化
(1)若类没定义构造方法,编译器自动生成无参构造方法
(2)若自定义构造方法,系统不再生成无参构造
(3)构造方法存在重载
例如
class Person {
private String name;//实例成员变量
private int age;
private String sex;
//默认构造函数 构造对象
public Person() {
this.name = "caocao";
this.age = 10;
this.sex = "男";
}
//带有3个参数的构造函数
public Person(String name,int age,String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public void show(){
System.out.println("name: "+name+" age: "+age+" sex: "+sex);
}
}
public class Main{
public static void main(String[] args) {
Person p1 = new Person();//调用不带参数的构造函数 如果程序没有提供会调用不带参数的构造函数
p1.show();
Person p2 = new Person("zhangfei",80,"男");//调用带有3个参数的构造函数
p2.show();
}
}