OOA :面向对象的分析
OOD :面向对象的设计
OOP :面向对象编程(重点)
学好面向对象,可以写出高质量代码。
高质量代码具备以下特点:复用性好!移植性好!扩展性好!维护性好!健壮性好!效率性好!可读性好!
类和对象
类指的是一类事物的统称,是不具体的。在程序中,指的是模板的意思。
对象 指的是一类事物具体的存在,真实的、能看到或能摸到的,在程序中指的是内存中的实例。
比如:人 是类,张三 就是对象。
面向对象三大特性:封装、继承、多态
先了解下封装的概念:
封装:将一个类别下所有对象之间共有的属性和行为封装到一个模板类的过程。
封装需要学习以下三点内容:
- 如何创建模板类
- 模板类中放当前类别下所有对象共有的属性/数据 ——变量
- 模板类中放当前类别下所有对象共有的行为/方法 ——方法
注意:模板类中不需要放main功能
class Person{
//共有数据
String name;
Int age;
Char sex;
//共有行为
void eat(){
}
void sleep(){
}
}
public class Student {
//共有数据
String name;
char sex;
int age;
//共有行为
void study(){
System.out.println(this.name+"在学习");
}
void sayHi(){
System.out.println("你好,我叫"+this.name+"今年"+this.age+"岁");
}
}
这里有必要了解一下变量的分类:
变量分两种:成员变量( 全局变量 )和局部变量
成员变量:在类的结构里面声明的变量,称之为成员变量, 作用域 在整个类中。
局部变量 :在方法的结构里声明的变量,称之为局部变量
如上代码,String name、char sex、 int age是在Student类中声明的,都是成员变量,下面类中的study()方法可以引用。如果在study()方法中定义了变量,则是局部变量,只能在study()方法中使用。
刚刚创建的Student类是我们自定义的类,自定义类也是一种数据类型,是引用数据类型。
- 如何创建对象
如何创建对象,其实大家刚接触 Java ,就已经使用过了,例如:Scanner s = new Scanner(); Java中,new 是创建的意思,遵照赋值顺序,创建扫描器对象赋值给Scanner类型变量(当然也可以说成对象名s)s。这里Scanner是引用数据类型,之前学习的int a = 100; double b = 2.2; 这里的int 和 double是基本数据类型,
如果想使用引用数据类型,那么一般都需要写创建对象的语法。
引用数据类型特点:变量名里存对象
Student students = new Student();// 类型 对象名 = new 类型对象();
- 如何访问对象
package oo.day01;
public class StudentDemo {
public static void main(String[] args) {
Student stu1 = new Student();//创建一个学生对象,并将对象存放到stu1变量里
stu1.age = 18;
stu1.name = "nana";
stu1.sex = 'M';
stu1.study();
stu1.sayHi();
Student stu2 = new Student();////创建一个学生对象,并将对象存放到stu2变量里
stu2.study();
stu2.sayHi();
}
}
基本数据类型默认值为0 ,0.0(int和double)。引用数据类型默认值为null。stu2中没有给age赋值,默认就为0;name不赋值,默认即为null
"C:\Program Files\Java\jdk1.8.0_291\bin\java.exe" "-javaagent:E:\Program Files\JetBrains\IntelliJ IDEA 2021.1.3\lib\idea_rt.jar=2895:E:\Program Files\JetBrains\IntelliJ IDEA 2021.1.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_291\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\rt.jar;E:\JSDVN\JSDVN2210\VN2210\out\production\VN2210" oo.day01.StudentDemo
nana在学习
你好,我叫nana今年18岁
null在学习
你好,我叫null今年0岁
Process finished with exit code 0
创建和访问对象过程这里有三点需要掌握:
- 创建对象时,对象中有什么数据,取决于模板类。
- stu1能打点调出什么,取决于声明stu1这个变量的类型中有什么。
- stu1的数据具体内容,由stu1中的对象来决定。
方法中使用成员变量时,有个默认的写法this —-this表示当前调用方法的对象!
例如上例:创建Student类时
public class Student {
//共有数据
String name;
char sex;
int age;
//共有行为
void study(){
System.out.println(this.name+"在学习");/**等价于System.out.println(name+"在学习");
因为study方法调用了成员变量name
*/ }
void sayHi(){
System.out.println("你好,我叫"+this.name+"今年"+this.age+"岁");
}
}
stu1调用了Student类中study方法(stu1.study())。这里的this指的就是stu1,