一、面向过程编程
就是站在过程的角度思考问题,我们之前学的只是都是面向过程编程,强调我们怎么去做:
遇见问题-->分析问题-->解决问题,完全都是我们自己写的过程,也就是先干嘛后干嘛。
这种设计思想的可维护性较低,扩展性较差。
二、面向对象编程
2.1一种新的编程思想
,就是站在管理着的角度思考问题,遇见问题-->让谁来做-->解决问题。
面向对象的最小程序单位是类,我们将一个个的对象封装在类里面,必须先有类再有对象,然后需要谁就把它拿出来用就行了。
示例:
//创建一个狗的类,里面定义一个方法
public class Dog {
void eat(){
System.out.println("狗可以吃东西");
}
}
public class Text {
public static void main(String[] args) {
//现在我们想让狗吃东西就直接调用上面那个类里面的方法就行了
Dog dog = new Dog();
dog.eat();
}
}
//面向对象编程就是找谁来做,而不需要我们自己动手,让狗吃东西。
//上面代码就是找到Dog类里面的对象让它来完成我们想要的功能
现实示例:
面向过程:都要自己做
面向对象:
找人来做。
2.2 优点:
符合我们常规的思维方式,稳定性好,可复用性强,易于开发大型产品,好维护。
2.3特点:
1.继承(Inheritance )
2.封装(Encapsulation )
3.多态(Polymorphism )
2.4抽象:
就是将一些具有相同特征的类的对象给抽取出来,例如:
狗,会吃东西;猫,也会吃东西;老鼠也会吃东西。就可以把他们相同的特征给抽取出来他们都会吃东西,所以把它们都归为动物这一类。
三、类与对象
类是具备某些共同特征或行为一类事物的抽象,比如上面案例中的学生类,学生都具有姓名、性别、年龄等特征,当然还有报名、请假等行为。其实现实生活中还有很多,比如:人类、车类、星球类,动物类, 猪类等
对象是类的实例,简单的认为对象就是类中具体的个体 ,比如张三就是人类的实例。
四、类的定义
//设计类语法:
public class 类名{
//可编写 0 到 N 个成员变量
[修饰符] 数据类型 变量名1;
[修饰符] 数据类型 变量名2;
//可编写 0 到 N 个成员方法/实例方法
[修饰符] 返回值类型 方法名称(参数){
//方法体
}
}
public class Animal {
String name;
String sex;
int age;
void play(){
System.out.println("动物可以玩");
}
void eat(){
System.out.println("动物可以吃东西");
}
}
五、对象的创建与赋值、取值
5.1创建对象
//创建对象
/*
类名 对象名=new 类名();
*/
public class Text {
public static void main(String[] args) {
Cat cat = new Cat();
}
}
5.2
给成员变量赋值语法:
对象名.成员变量 = 值; //注意:必须值和成员变量数据类型一致
例如:
public class Text {
public static void main(String[] args) {
Cat cat = new Cat();
cat.sex = "公";
5.3
对象取值语法:
对象名.成员变量 ;
对象调用实例方法:
对象名.方法名(…);
例如:public class Text {
public static void main(String[] args) {
Cat cat = new Cat();
cat.sex = "公";
cat.play();
System.out.println(cat.sex);
Animal animal = new Animal();
animal.eat();
animal.name = "za";
六、构造函数
6.1构造函数的特点;
①每一个类中都至少有一个构造方法;
② 如果没有看到(显示的),那么存在一个隐式的无参数的构造方法;
③ 如果一个类中有显示的构造方法,那么隐式的无参的构造方法就不存在了;
④ 一般来说我们写了有参数的构造函数,立马写一个无参数的构造函数,哪怕它不使用到。这是规范,防止你犯一些低级错误。
6.2构造函数的作用
在创建对象的同时给对象的成员变量赋值(初始化工作)
//语法
public class 类名{
成员变量 (字段);
构造方法(有参、无参);
方法 (具体的一个功能行为);
}
public class User {
/**姓名*/
String name;
/**年龄*/
int age;
/**
* 无参构造
*/
public User() {
System.out.println("User无参构造...");
}
/**
* 有参构造
* 形参个数由需求决定
*/
public User(String n,int a) {
name = n;//将传入的n的值赋值给成员变量name
age = a;//将传入的a的值赋值给成员变量age
System.out.println("User有参构造...");
}
public void playGame() {
System.out.println("耍鸟...");
}
}
6.3构造函数的重载
public class User {
//属性
String username;
String password;
public User(){
}
//7 构造函数一般的用户是用来在创建对象的时候就给对象的属性赋值
public User(String uName,String pwd){
username = uName;
password = pwd;
}
//8 构造函数也能重载
public User(String uName){
username = uName;
password = "123456";
}
6.4构造函数的注意事项
普通方法不要和类名一致,行业默认规则;
普通方法(Method)和构造方法(Constructor)是不同的两种结构,调用场景也不一样
-
普通方法的调用 : 3种
1)类名.方法名(…); -有static修饰的
2)对象名.方法名(…);
3)方法名(…); --同一个类里面 都要static 或 都没有static修饰
-
构造方法的调用 :
(目前为止) new 类名(...);