初识面向对象

1.万物皆对象

万物皆对象是指我们可以将任何的事物都分析出属性和行为,理解为对象

2.类和对象的关系

类是对象的抽象,对象是类的具体。
由类衍生出对象

3.属性和方法

属性:一些事物共有的特征,称之为属性
方法:一些事物共有的动作,称之为方法

4.创建类和对象

package com.qfedu.test2;
/**
* 学生类
* 属性:姓名、性别、学号、爱好……
* 方法:学习、吃饭、睡觉
* @author Admin
*
*/
public class Student {
   String name;
   char sex;
   String stuNo;
   String hobby;
   
   public void stduy() {
   	System.out.println("学生喜欢学习");
   }
   public void eat() {
   	System.out.println("学生喜欢吃饭");
   }
   public void sleep() {
   	System.out.println("学生喜欢睡觉");
   }
   
   public static void main(String[] args) {
   	Student stu1 = new Student();
   	stu1.name = "张三";
   	stu1.sex = '男';
   	stu1.stuNo = "aa111";
   	stu1.hobby = "学习";
   	
   	System.out.println("姓名:"+stu1.name);
   	System.out.println("性别:"+stu1.sex);
   	System.out.println("学号:"+stu1.stuNo);
   	System.out.println("爱好:"+stu1.hobby);
   	
   	stu1.stduy();
   	stu1.eat();
   	stu1.sleep();
   	System.out.println("------------------");
   	Student stu2 = new Student();
   	stu2.name = "李四";
   	stu2.sex = '男';
   	stu2.stuNo = "bb222";
   	stu2.hobby = "吃饭";
   	
   	System.out.println("姓名:"+stu2.name);
   	System.out.println("性别:"+stu2.sex);
   	System.out.println("学号:"+stu2.stuNo);
   	System.out.println("爱好:"+stu2.hobby);
   	
   	stu2.stduy();
   	stu2.eat();
   	stu2.sleep();
   }
}

打印详细的信息,将属性使用到方法中

package com.qfedu.test3;
/**
 * 学生类
 * 属性:姓名、性别、学号、爱好……
 * 方法:学习、吃饭、睡觉
 * @author Admin
 *
 */
public class Student {
	String name;
	char sex;
	String stuNo;
	String hobby;
	
	public void stduy() {
		System.out.println("学生喜欢学习");
	}
	public void eat() {
		System.out.println("学生喜欢吃饭");
	}
	public void sleep() {
		System.out.println("学生喜欢睡觉");
	}
	public void introduce() {
		System.out.println("我的名字叫"+name+",性别是"+sex+",学号是"+stuNo+",爱好是"+hobby);
	}
	public static void main(String[] args) {
		Student stu1 = new Student();
		stu1.name = "张三";
		stu1.sex = '男';
		stu1.stuNo = "aa111";
		stu1.hobby = "学习";
		stu1.introduce();
		
		System.out.println("-------------------------------------");
		Student stu2 = new Student();
		stu2.name = "李四";
		stu2.sex = '男';
		stu2.stuNo = "bb222";
		stu2.hobby = "吃饭";
		stu2.introduce();
		
	}
}

4.实例变量与局部变量的区别

实例变量 局部变量
定义位置 类中
作用范围 整个类中
默认值 有默认值,与数组相同
重名 可以与局部变量重名,局部变量优先使用,就近原则
生命周期 随着对象的创建而存在,随着对象被垃圾回收而死亡
存储位置 实例变量存储在堆中

5.方法重载

1.在一个类中
2.方法名称相同
3.参数列表不同,包括参数的个数、类型、顺序,有一个不同即可称为不同
4.跟返回值、访问权限修饰符无关

public class Test1 {
	
	public int add(int a ,String str) {
		return 1;
	}
	
	public int add(String str , int a) {
		return 0;
	}
	
	public int add(int a,int b) {
		return a + b;
	}
	
	public int add(int a,int b,int c) {
		return a + b + c;
	}
	
	public int add(int a,int b,int c,int d) {
		return a + b + c + d;
	}
	
	public int add(int a,int b,int c,int d,int e) {
		return a + b + c + d + e;
	}
	
	
	public int add(int a,int b,int c,int d,int e,int f) {
		return a + b + c + d + e + f;
	}
	
	public static void main(String[] args) {
		Test1 t1 = new Test1();
		t1.add(10, 20, 30);
		System.out.println(t1.add(10, 20));
	}
	
}

6.构造方法

6.1概念

构造创建,用于创建对象的特色方法,只能在创建对象时调用,且默认调用无参构造
构造方法书写格式:访问修饰符 + 类名(形参列表){}
普通方法书写格式:访问修饰符 + 返回值类型 + 方法名称(形参列表){}

6.2无参构造

无参构造是默认存在,不管是否书写都有

public class Student {
	String name;
	int age;
	String gradeName;
	String hobby;
	
	public void print() {
		System.out.println("名字" + name + ",年龄" + age + ",爱好" + hobby + ",班级" + gradeName);
	}
	
	public Student() {
		System.out.println("Student类无参构造执行了");
	}
	
	public static void main(String[] args) {
		Student stu1 = new Student();
		stu1.name = "赵四";
		stu1.age = 17;
		stu1.gradeName = "三年二班";
		stu1.hobby = "尬舞";
	}
	
}

6.3有参构造

我们在创建对象的同时,可以给属性赋值,使用有参构造
无参构造是默认存在,如果书写了有参构造,那么默认的无参将被覆盖

public class Student {
	String name;
	int age;
	String gradeName;
	String hobby;
	
	public void print() {
		System.out.println("名字" + name + ",年龄" + age + ",爱好" + hobby + ",班级" + gradeName);
	}
	
	public Student() {
		System.out.println("Student类无参构造执行了");
	}
	
	public Student(String n,int a,String gname,String h) {
		name = n;
		age = a;
		gradeName = gname;
		hobby = h;
	}
	public Student(int a) {
		age = a;
	}
	
	public Student(String n,int a) {
		name = n;
		age = a;
	}

	public Student(int a,String n) {
		name = n;
		age = a;
	}
	public static void main(String[] args) {
		Student stu3 = new Student(20, "大拿");
		stu3.gradeName = "三年二班";
		stu3.hobby = "理财";
		stu3.print();
		
		Student stu2 = new Student("广坤", 15, "三年二班", "口技");
		stu2.print();
	}
	
}

6.4构造方法重载

与普通方法重载规则类似
构造方法都是类名,没有返回值,与访问权限无关,所以只要求参数列表不同(参数的个数、类型、顺序)。

7.this关键字

this关键字表示当前对象
适用场景:
1.访问属性
2.访问方法
3.访问构造方法,this访问构造方法必须在其他构造方法中第一句,只能使用一次

public class Student {
	String name;
	int age;
	String gradeName;
	String hobby;
	
	public void printName() {
		System.out.println("名字是" + name);
	}
	
	public void printAge() {
		System.out.println("年龄是" + age);
	}
	public void print() {
		printName();
		printAge();
		System.out.println("年龄" + age + ",爱好" + hobby + ",班级" + gradeName);
	}
	/**
	 * 	回顾之前写的构造方法 名称书写不规范 不符合见名知意的规则 所以我们将参数名称修改
	 * 	修改完以后 发现不能正常赋值了 因为使用的都是局部变量
	 * @param name
	 * @param age
	 * @param hobby
	 * @param gradeName
	 */
	public Student(String name,int age,String hobby,String gradeName) {
		// this.name = name;
		// this(name);
		// this.age = age;
		// this(name, age);
		// this.hobby = hobby;
		this(name, age, hobby);
		this.gradeName = gradeName;
	}
	
	public Student(String name,int age,String hobby) {
		this(name, age);
		this.hobby = hobby;
	}
	
	public Student(String name,int age) {
		this(name);
		this.age = age;
	}
	
	
	public Student(String name) {
		this.name = name;
	}
	public Student() {}
	
	public static void main(String[] args) {
		Student stu1 = new Student("赵四",17,"尬舞","三年二班");
		stu1.print();
	}
	
}
上一篇:Vue的基本操作


下一篇:leetcode-581. 最短无序连续子数组