面向对象(一)
1、面向对象的概念
1、概述:面向对象是一种复合人类思维习惯的编程思想。现实生活中存在各种形态不同的事物,这些事物之间存在着各种各样的联系。在程序中使用对象来映射现实生活中的事物,使用对象的关系来描述事物之间的联系,这种思想就是面向对象。
2、面向对象与面向过程的区别:面向过程就是分析解决问题所需要的步骤,然后用函数把这些步骤一一实现,使用的时候一个一个依次调用就可以了。面向对象则是把解决的问题按照一定规则划分成多个独立的对象,然后通过调用对象的方法来解决问题。
3、面向对象的特征:
a、封装性:把对象的属性和行为封装起来,不需要让外界知道具体的实现细节
b、继承性:主要描述类与类之间的关系,通过继承,可以在无需重新编写原有类的情况下,对原有类的功能进行拓展
c、多态性
4、面向对象的开发
就是不断的创建对象,使用对象,指挥对象做事情
2、类与对象
1、类与对象的关系:类是对某一类事物的抽象描述,而对象用于表示实现该类事物的个体。
2、类的定义格式:
class 类名{
成员变量;
成员方法(){
}
}
3、对象的创建与使用
A、创建对象格式:
类名 对象名称=new 类名();
B、访问对象成员格式
对象引用.对象成员
4、以定义学生类及其使用为例
class Student{
String name;
int age;
public void introduction(){
System.out.println("大家好,我是"+name+",今年"+age+"岁!");
}
}
public class Blog {
public static void main(String[] args) {
Student student1 = new Student();
Student student2 = new Student();
student1.age=18;
student1.name="张三";
student1.introduction();
student2.introduction();
}
}
运行结果:
大家好,我是张三,今年18岁!
大家好,我是null,今年0岁!
Process finished with exit code 0
3、对象的内存图
例:三个引用二个对象的内存图
4、成员变量和局部变量的区别
1、成员变量是定义在类中方法外的变量,而局部变量是定义在方法的形参和方法中的变量
2、成员变量有默认值,局部变量没有默认值;
3、成员变量在堆内存中,局部变量在栈内存中;
4、成员变量:随着对象的创建而存在,随着对象的消失而消失,
局部变量:随着方法的调用而存在,随着方法调用完毕而消失。
5、方法的形式参数是类名的时候如何调用
形参类型为类类型(引用类型),需要传递的是该类的对象
注意:形参为引用类型时,其值得改变直接影响实际参数
例:
class Student{
int age;
public void introduction(){
System.out.println("大家好,我今年"+age+"岁!");
}
}
public class Blog {
public static void main(String[] args) {
Student student = new Student();
student.age=18;
set(student);
student.introduction();
}
public static void set(Student student){
student.age=20;
}
}
运行结果:
大家好,我今年20岁!
Process finished with exit code 0
6、类的封装
A:this关键字
a:作用:解决局部变量隐藏成员变量
b:特点:是当前类的对象引用,代表当前类的一个对象。谁调用这个方法,那么该方法的内部的this就代表谁
B:private关键字
a:是一个权限修饰符
b:可以修饰成员变量和成员方法
c:被其修饰的成员只能在本类中被访问
C:setXxx()方法和getXxx方法
私有属性只能在它所在类中被访问,为了能让外界访问私有属性,Java给我们提供了一些使用public修饰的公有方法,其中包括用于获取属性值的getXxx()方法和设置属性值的setXxx()方法。
举例:
class Student {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age>0&&age<100) {
this.age = age;
}else {
System.out.println("年龄不合法...");
}
}
public void introduction(){
System.out.println("大家好,我是"+name+",今年"+age+"岁!");
}
}
public class Package {
public static void main(String[] args) {
Student student = new Student();
student.setAge(-1);
student.setName("张三");
student.introduction();
}
}
运行结果:
年龄不合法...
大家好,我是张三,今年0岁!
Process finished with exit code 0