目录
6.面向对象编程
6.1 OO编程思想
一切来自于现实世界
世界是由对象组成,对象:一切客观的事物
对象的组成:
属性 对象有什么
方法 对象能做什么 行为
对象之间的关系:
1)继承关系
2)关联关系 一个对象成为另一个对象的属性
3)依赖关系 一个对象调用另一个对象的方法
面向对象思想
面对需求,首先找出解决问题的对象,让对象之间建立适当的关系
6.2面向对象编程思想
用计算机中的对象,模拟现实中的对象。
用计算机中类型的概念,对应现实世界中的类的概念
类:对象共性的抽象,人对一类事物的认识。
人(类)-李沁(对象)
6.3类
6.3.1定义
属性 :数据存储在变量中
成员变量的特点:
1)成员变量有默认值 在对象创建的过程中,属性会被自动分配到默认值
2)成员变量的作用范围,至少是全类内部
3)成员变量和局部变量可以重名 ,同名时局部变量优先访问
方法 :行为 (能做什么) 函数
方法声明: 修饰符(多个,顺序不重要) 返回值类型 方法名(参数) 抛出的异常
方法实现:{ }
public static void main(String[] args)
6.3.2 构造方法
没有返回值类型
方法名必须和类名相同,包括大小写
不允许手工调用,在对象构造过程中自动调用
如果一个类没有定义任何构造方法,编译器会提供默认公开无参构造
6.3.3方法的重载
Overload:在一个类中,可以定义多个同名的方法,方法名相同,参数表不同
1)对于修饰符 返回值类型 方法名 抛出的异常 无要求
2)参数表不同:参数个数不同,参数类型不同,参数类型排列不同
如果只有参数名不同,不算重载
3)编译器根据实参类型,选择重载方法调用
重载的作用:一个类的统一行为,由于参数不同造成的实现的差异,对对象的调用者屏蔽
例如我们有一个人的类,类里有吃的方法,根据方法的重载传不同的食物对应不同的吃法。
6.3.4创建对象
new 类名 ( 构造参数 调用构造方法的实参);
new Student();
6.3.5对象的使用
Solution solution = new Solution();
solution.name solution.属性
solution.eat() solution.方法名()
package day03;
/**
* @author 小白孙佳遥 想杨屎郡了
*/
public class text1 {
public static void main(String[] args) {
Student s = new Student("yjj",20);
System.out.println(s.name+" "+s.age);
s.study();
}
}
class Student{
String name;
int age;
public Student(){};
public Student(String n,int a){
name = n;
age = a;
}
public void study(){
System.out.println("Student study");
}
}
6.3.6 引用
8种基本类型的变量 简单变量 存在栈中,存值
引用类型(对象,数组…) 存 在栈中的是地址,对象存在堆中
局部变量 vs 成员变量 看定义位置
-
局部变量:存在栈空间,函数内部定义
-
成员变量:存在堆空间,函数外部定义
简单变量 vs 引用 看变量类型
简单类型:8种基本类型 存值 作为函数的参数时,实参和形参值是相同的
引用:不是8种基本类型 存地址 作为函数的参数时,实参和形参地址相同,指向同一个对象
package day03;
/**
* @author 小白sjy
*/
public class text2 {
public static void main(String[] args) {
int a = 10;
int b = a;
b++;
System.out.println(a);//10
MyClass mc1 = new MyClass();
MyClass mc2 = mc1;// 把mc1的内容赋值到mc2
mc2.value++;//mc2和mc1指向的地址相同 value = 20; 此时mc2的值增加后,mc1耶相应增加
System.out.println(mc1.value);//21
}
}
class MyClass{
int value = 20;
}
6.4 this
关键字,是特殊的引用 代表对象自身 当前对象
this.属性/方法 代表调用当前对象的属性/方法
可写可不写
必须写的时候:局部变量与成员变量同名的时候,并且想访问成员变量
this() 调用本类其他的构造方法 ;必须是构造方法的第一条语句
package day03;
/**
* @author 小白孙佳遥 想杨屎郡了
*/
public class text3 {
public static void main(String[] args) {
System.out.println("测试手机类");
Iphone iphone = new Iphone();
iphone.call("杨屎郡");
System.out.println(iphone.model);
System.out.println(iphone.brand);
System.out.println("================");
System.out.println("学生类");
Stuent stu = new Stuent();
stu.name=("yjj");
System.out.println(stu.name);
stu.age=20;
System.out.println(stu.age);
stu.setAge(50);
System.out.println(stu.getAge());
}
}
class Iphone{
String brand;
String model="opponeo5";
public void call(String name){
System.out.println("给"+name+"打电话");
}
}
class Stuent{
String name;
int age=10;
public Stuent(){}
public Stuent(int age){
this.age=age;
}
public void setAge(int age){
// 此处可以写对age的限定
if(age >200 ||age<0){
System.out.println("你年龄给的毛啊");
this.age = 250;
}else{ this.age = age;}
}
public int getAge(){
return age;
}
}