一、面向对象概念
1、什么是对象
现实世界中的对象:手机、车。
对象拥有属性和功能(function、method)。
2、程序中的对象
如何在程序中表示现实世界中的对象?
现实中的对象多数来自于“模板”,程序中的对象也应该具有“模板”。
3、类
1.什么是类?
2.类的抽取
3.创建类
1.类的由来:
类是由多个具有相同特征和行为的对象抽取出来的
2.如何定义一个类:
1、确定类名
2、编写属性(实例变量)
3、编写方法(实例方法)
属性:通过变量表示,又称实例变量。
4、创建对象
语法:类名 对象名 = new 类名();
Student stu = new Student();
例:
package com.qf.oop;
public class TestStudent {
public static void main(String[] args) {
//创建Student对象
Student stu = new Student();
//使用对象(1、给对象属性赋值和取值 2、调用对象的方法)
//给对象属性赋值
stu.name = "张三";
stu.age = 20;
stu.sex = "男";
stu.score = 100;
//对象属性取值
System.out.println(stu.name);
System.out.println(stu.age);
System.out.println(stu.sex);
System.out.println(stu.score);
//调用对象的方法
stu.study();
stu.sleep();
}
}
5、类和对象的关系
类:定义了对象应具有的属性和方法,类是对象的模板
对象:对象是类的实例,同一个类是可以创建出多个对象的
6、实例变量
实例变量和局部变量的区别
特殊情况:局部变量可以与实例变量重名
如果成员变量和局部变量的名称相同的时候,java中遵循就近原则
7、实例方法
1.概念:
不使用static修饰的方法
public void sleep() {
System.out.println("正常人睡觉,8小时");
}
2.方法的重载
方法重载:在一个类中的出现同名方法称之为方法的重载
方法重载的要求:
1、同名不同参(参数类型、个数、顺序)
2、与返回值,访问修饰符无关
调用重载的方法会根据传递的参数不同,去执行不同的方法
重载的好处:方便、灵活、屏蔽使用差异
public void sleep() {
System.out.println("正常人睡觉,8小时");
}
public void sleep(int hour) {
System.out.println("其他人睡觉,"+hour+"小时");
}
3.重载的方式
package com.qf.oop;
public class Student {
//属性(变量) 成员属性(变量)
String name;
int age;
boolean sex;
double score;
//方法 成员方法
public void study() {
// String name = "abc";
System.out.println(name+"学习");
score = score+1;
}
// 只有返回值不一样,不可以
// public int study() {
String name = "abc";
// System.out.println(name+"学习");
// score = score+1;
// return (int) score;
// }
/**
* 方法的重载
* 在同一个类中,方法的名字相同,但是参数不同
* @param hours
*/
public void study(int hours){
System.out.println(name+"学习");
score = score+hours;
}
/**
* 方法的重载
* 参数的个数一样,但是参数的类型不同
* @param hours
*/
public void study(double hours){
System.out.println(name+"学习");
score = score+hours;
}
/**
* 方法重载
* 参数个数不一样
* @param hours
* @param groupnum
*/
public void study(double hours,int groupnum){
System.out.println(name+"学习");
score = score+hours+groupnum;
}
/**
* 参数的个数相同,
* 但是方法参数的类型的顺序不一样,也可以重载
* @param groupnum
* @param hours
*/
public void study(int groupnum,double hours){
System.out.println(name+"学习");
score = score+hours+groupnum;
}
public void sleep() {
int a = 100;
// 在定义局部变量时,可以使用与实例变量相同的名字
// String name = "abc";
System.out.println(name+"睡觉"+a);
}
public void play(){
System.out.println(name+"play");
score = score -2;
}
}
二、构造方法
1、构造方法
类中的特殊方法,用于创建类的对象
- 作用:创建类的对象(实例化)
- 语法:
-
// 无参构造
public 构造方法名(){}// 有参构造
public 构造方法名(类型 参数1,类型 参数2){}
2、对象创建过程
1.对象的创建过程:
- 内存中开辟对象空间
- 为各个属性赋予初始值
- 执行构造方法中的代码
- [将对象的地址赋值给变量]
3、对象的内存分配
存储对象的变量p(引用)中保存对象的地址,通过变量中的地址访问对象的属性和方法。
4、构造方法为属性赋值
- 创建对象的同时,将值传入构造方法
- 由构造方法为各个属性赋值
5、造方法重载
构造方法也可重载,遵循重载规则。
6、this关键字
this关键字:
含义:表示当前类的对象,在对象被创建的时候自动产生
作用: 可以调用本类的属性、方法、构造方法
- 调用本类的属性
- 调用本类的方法:
package com.qf.oop;
/**
* 注意:
* 如果我们给一个类中添加了自定义的构造方法,那么
* 编译器原来会自动添加的 无参构造,就没有了
* 如果还需要无参构造方法,只能自己手动在类中添加
*/
public class Dog {
public Dog() {
}
public Dog(int age) {
this.age = age;
}
int age;
String name;
public void live(){
this.eat();
this.eat();
this.sleep();
}
public void eat(){
System.out.println("dog eat");
}
public void sleep(){
System.out.println("dog sleep");
}
}调用本类的构造方法(只能在构造方法中使用)
在构造方法中使用this,表示成员变量
public class Person {
String name;
int age;
public Person() {}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}