面向对象的三大特征:封装继承多态
1、类和对象
类:抽象不具体的事物,通常表示一类事物的类别,在程序中表示模板
对象:具体的,真实存在的,可以看到的
1.1 如何创建类
类中放所有对象共有的数据/属性--------变量
类中放所有对象共有的行为/方法--------方法
class Person{//人类的模板
//所有对象共有数据/属性
int age;//年龄
String name;//姓名
char sex;//性别
//所有对象共有的行为
void eat(){ //吃的行为
}
void sleep(){//睡觉
}
void play(){//玩耍
}
}
-----------------------------------------------
class car{//车类的模板
//共有数据
String color;//颜色
String type;//型号
double price;//价格
//共有的行为
void run(){//前进的行为
}
void back(){//后退的行为
}
void stop(){ //刹车的行为
}
}
-------------------------------------------------
class ObserverSubmarine{//侦察潜艇类
//所有侦察潜艇对象共有的数据
int x;
int y;
int width;//宽
int height;//高
int speed;//速度
//共有的行为
void step(){ //移动的行为
}
}
变量分为两种:
① 成员变量:声明在类的里面,方法外的变量叫做成员变量,作用域在整个类中
② 局部变量:声明在方法里面的变量,都叫做局部变量,作用域在当前方法中
package oo.day01;
/**
* 学生类模板: 代表所有学生对象
* 类中放所有学生对象共有的属性(变量)和行为(方法)
* 模板中不要放main 功能
*/
public class Student {
//共有的属性 成员变量作用域在整个类体中
String name;//姓名
int age;//年龄
int stuID;//学号
//共有的行为
void study() {//学习的行为
//int a = 0;方法声明的变量为局部变量 作用域只在当前方法中可见
System.out.println(name + "在刻苦学习...");
}
void sayHi() {
System.out.println("大家好,我叫" + name + ",今年" + age + "岁了,我的学号是:" + stuID);
}
}
自定义的类也是一种数据类型
1.2 如何创建对象
数据类型 变量名 创建一个学生对象
Student stu = new Student(); //创建了一个学生对象 将对象放到stu这个变量里面
Student zs = new Student(); //创建了一个学生对象 将对象放到zs这个变量里面
Student ls = new Student(); //创建了一个学生对象 将对象放到ls这个变量里面
1.3 如何访问对象
① 对象可以打点调出什么内容,取决一对象的模板中有什么。
② 那个对象 打点 调用属性 并赋值 那么就是那个对象的数据进行赋值。
③ 那个对象 打点 调用 方法 那么调用的方法里面用到的数据都是那个对象的 。
package oo.day01;
/**
* 学生模板的测试类:
* 用于创建学生类对象
* */
public class StudentDemo {
public static void main(String[] args) {
//创建对象的语法
Student zs = new Student();//创建一个学生对象 存到了 zs变量里面. 拿zs就相当于用这个具体对象!
//zs 这个变量 能打点调用 出什么 取决去当前 对象的模板!
//哪个对象 打点 调用 属性 并赋值 那么就是给那个对象存到数据
//访问对象的语法
zs.name = "张三"; //为zs这个对象的姓名赋值 为"张三"
zs.age = 30; //为zs这个对象的年龄赋值 为30
zs.stuID = 1001;//为zs这个对象的学号赋值 为1001
//哪个对象 打点 调用 方法 那么调用的方法里面用到数据都是那个对象的!
zs.study();//调用zs这个对象 的学习行为
zs.sayHi();//调用zs这个对象 的问好行为
//------------------------------------------
Student ls = new Student();//创建一个学生对象 赋值给 ls这个变量
ls.name = "李四";
ls.age = 40;
ls.stuID = 1002;
ls.study();
ls.sayHi();
}
}
1.4 构造方法
构造方法又称为构造器
① 适用性:在创建对象时,可以快熟的实现当前对象的属性赋值(初始化赋值)。
② 构造方法的语法:类名(){} (注意返回值那一说,加镂空就报错)
③ 作用:构造方法分本质作用就是写构造方法,系统会自动送一个无参数的构造方法。
Java规定:如果不给类模板写构造方法,系统会自动送一个无参的构造方法。
特性:当前类模板,若被创建对象时,系统则会自动调用相对应的构造方法。
④ 构造方法也可以重载:只需要满足构造方法名相同,参数个数或参数类型不同即可。
⑤ 如果在一个类中写了构造方法,系统则不会再赠送默认的构造方法(无参数的构造方法)
package oo.day01;
/**
* 学生类模板: 代表所有学生对象
* 类中放所有学生对象共有的属性(变量)和行为(方法)
* 模板中不要放main 功能
*/
public class Student {
//共有的属性 成员变量作用域在整个类体中
String name;//姓名
int age;//年龄
int stuID;//学号
//有参数的构造方法
Student(String name1,int age1,int stuID1) { //构造方法再类被创建对象时执行
name = name1;
age = age1;
stuID = stuID1;
}
//构造方法语法: 类名(){}
//无参数的构造方法
Student(){
}
//共有的行为
void study() {//学习的行为
int a = 0;//方法声明的变量为局部变量 作用域只在当前方法中可见
System.out.println(name + "在刻苦学习..."); //隐式写法:this.name 代表当前对象的name
}
void sayHi() {
System.out.println("大家好,我叫" + name + ",今年" + age + "岁了,我的学号是:" + stuID);
}
}
1.5 this关键字
this代指的当前对象,使用this关键字可以区分成员变量 和 局部变量
哪个对选打点调用方法,那么this指代的就是这个对象
Java规定:局部变量可以于成员变量名字一样。在使用变量时,遵循就近原则
解决:可以用this关键字 明确表示 成员变量 避免于布局变量冲突的问题
main{
Student zs = new Student();
Student ls = new Student();
Stud