面向对象
1. 定义
是一种设计思想,万物皆对象
2.特性
封装、继承、多态、(抽象)
3. 类
- 定义:是一个主观的定义
- 生活中先有客观的事物-----划分出对应的类
- java中先有类-----才能创建出对象
- 类和对象的关系:
- 类是对大量对象共性的抽象性概括
- 对象是类的具体化
- 类是创建对象的模板
- 定义一个类:
- 手机类:
- 1.颜色、尺寸、品牌、价格、摄像头的个数、系统----属性或者特点
- 2.能够有什么样的功能,打电话、发短信、聊微信、学习、打游戏…
- 汽车类:
- 1.属性: 品牌、颜色、车型、价格、轮子数量、座位数…
- 2.功能: 能跑、能载人、听音乐、吹空调…
- 手机类:
注意:在定义类的时候,会选择具有代表性的属性和功能
命名规范:类名尽可能标识出这个类的实际含义
类的语法结构:
[修饰符] class 类名{
[属性;]
语法格式: [修饰符] 数据类型 属性名 [=初始值];
[方法;]:表示一个类的功能、行为、能力
语法格式: [修饰符] 返回值类型 方法名([参数列表]){
[return 返回值;]
}
如果方法没有返回值,返回值类型使用void
}
3. 方法的使用
①语法结构:
[修饰符] 返回值类型 方法名([参数列表]){
方法体;
[return 返回值;]
}
参数:一般理解为是方法需要的额外信息,并且不能明确一个确定的值
定义在方法中的是形参:
- ①形参用在方法中可以理解为实际的值
- ②约束实参的类型
return的作用:
- ①在方法中用来返回返回值
- ②结束方法
在类的使用中,方法和属性的使用者是对象。对象在调用方法和属性之前一定要先实例化
传参:
//测试类
public class Test {
public static void main(String[] args) {
//食物对象
Food food = new Food();
food.name="竹子";
//动物对象
Panda panda = new Panda();
panda.name="小苏";
//饲养员对象
Feeder feeder = new Feeder();
feeder.panda=panda;
feeder.food=food;
feeder.name="张三";
//饲养员开始喂动物吃食物
feeder.feed();
}
}
//熊猫类
public class Panda {
String name;
//吃
void eat(Food food){//吃食物,把食物作为参数
System.out.println(name+"开始吃"+food.name);
}
}
//食物类
public class Food {
String name;
}
//饲养员类
public class Feeder {
//属性
Panda panda;
//食物
Food food;
//名字
String name;
//饲养员员,拿食物喂动物
void feed(){
System.out.println("饲养员"+name+",把"+food.name+"喂给了"+panda.name);
//动物吃食物
panda.eat(food);
}
}
4. 构造方法
①作用:用来创建对象使用,是比较特殊的方法
②语法结构:
[修饰符] 类类型([参数列表]){
构造方法体;
}
注:
1、构造方法没有返回值类型,连void都不能使用。
2、构造方法的名字必须和类的名字保持一致。
附:
1、如果一个类没有显式的定义构造方法,那么系统会默认提供一个无参构造方法。
2、如果显示的定义了构造方法,系统不再提供构造方法。
3、类定义了有参构造方法,一般都会把无参构造方法带上。
5. 方法的重载
- 1.定义:在一个类中,方法名相同,参数列表不同的方法就叫做方法的重载
- 参数列表不同表示:1、个数不同 2、类型不同 3、顺序不同
6. 成员变量和局部变量
- 成员变量:直接在类中定义的属性也叫成员变量
- 局部变量:定义在方法中的变量变量是局部变量
- 区别:
- 1.成员变量有缺省值,局部变量没有缺省值。局部变量在使用之前一定要赋值
- 2.成员变量所有方法都可以直接使用,局部变量只能在定义了这个变量的代码块中使用
- 3.成员变量可以使用访问修饰符修饰,局部变量不能访问修饰符
7.this关键字
this:当前类的一个实例(对象)
1.当局部变量和成员变量重名时,成员变量被隐藏,使用[this.变量名]来访问被隐藏的成员变量
2.在本类的构造方法中,使用[this([参数列表])]来调用本类的其他构造方法
public class Student {
public int id=101;//学生的编号
protected String name;
int age;
private String sex;//性别
void show(){
int id=201;
System.out.println(id);
//使用this关键字来访问被隐藏的成员变量,this.变量名
System.out.println(this.id);
say();
}
void say(){
System.out.println("哈哈哈"+name+sex);
}
public Student(){
//this(10);
show();
}
//再有参构造方法中调用本类其他构造方法
Student(int id){
this();//无参构造方法
this.id=id;
}
}