面向对象

这篇博客深入介绍了面向对象编程的概念,包括对象、类、实例变量、方法重载、构造方法以及this关键字的使用。通过实例展示了如何创建和使用对象,强调了面向对象在解决复杂问题时的优势,并探讨了构造方法的重载和对象创建的过程。
摘要由CSDN通过智能技术生成

面向对象

一、什么是对象

万物皆对象。

二、什么是面向对象

面向对象是一种编程思想。

一般情况下是与面向过程对比来说的。

面向过程:

将大象装进冰箱。三步。一般用来解决相对简单的业务问题,代码量较少。

面向对象:

使用相应的思想去解析该问题。

  • 大象:大小

  • 冰箱:容积、入口

  • 执行者:推

面向对象思想一般用来解决大型项目,以及比较复杂业务问题。代码量较多。

三、对象

对象具备一定的特征和行为。

特征:一般使用名词。又称为属性。代表对象有什么。例如:大小、颜色等

行为:一般使用动词。又称为方法。代表对象能做什么。例如:吃、跑等

四、什么是类

类是对象产生的模板。具备有相同的特征和行为的对象,所抽取的共同的特征和行为的模板称为类。

/**
 * 狗
 */
public class Dog {
    // 属性(特征)
    String brand; // 品种
    int age; // 年龄
    String sex; // 性别
    String furColor; // 毛色
    
    // 方法,行为
    public void eat() {
        System.out.println("正在吃...");
    }
    
    public void sleep() {
        System.out.println("正在睡...");
    }
}
public class Demo1 {
    public static void main(String[] args) {
        // 创建一只狗
        Dog dog1 = new Dog();
        dog1.brand = "二哈";
        dog1.age = 2;
        dog1.sex = "公";
        dog1.furColor = "黑白";
        
        System.out.println("品种为:" + dog1.brand + ",年龄为:" 
                + dog1.age + ",性别为:" + dog1.sex + ",颜色为:" + dog1.furColor);
        
        dog1.eat();
        dog1.sleep();
        
        Dog dog2 = new Dog();
        dog2.brand = "金毛";
        dog2.age = 1;
        dog2.sex = "公";
        dog2.furColor = "金色";
        
        System.out.println("品种为:" + dog2.brand + ",年龄为:" 
                + dog2.age + ",性别为:" + dog2.sex + ",颜色为:" + dog2.furColor);
        
        dog2.eat();
        dog2.sleep();
    }
}

五、实例变量

对象也叫实例,属性也叫特征、字段(field)、实例变量。

一般变量需要先赋值后使用,实例变量(属性)不需要赋值,可以直接使用,会有默认值。默认值和数组的默认值相同。

public class Demo03 {
    public static void main(String[] args) {
        Student s1 = new Student();
        System.out.println(s1.score); // 打印默认值0
    }
}
局部变量实例变量
定义位置定义在方法的内部定义在类的内部,方法的外部
默认值没有默认值,先赋值后使用有默认值,与数组相同
使用范围从定义的行到其结构结束本类内部有效
命名冲突局部变量不允许重名不能与实例变量同名,但是可以与局部变量同名。局部变量优先

六、实例方法

实例方法在定义时不能加static。

分为方法声明和方法实现。

方法声明指方法的名称、返回值、参数列表等。

方法的实现即大括号中间的内容。

public class Student {
    int score;
    
    public void printScore() // 方法声明
    // 方法实现
    {
        int score = 5;
        System.out.println(score);
        System.out.println(this.score);
    }
}

七、方法重载(overload)

方法重载是指方法名称相同,参数列表(类型、个数、顺序)不同。与返回值类型、访问修饰符无关。

系统根据参数列表去找到相应的方法进行调用。

public class Person {
    // 食物
    public void eat(String s) {
        
    }
    
    // 药物
    public void eat(int n) {
        
    }
    
    public void eat(int n, String m) {
        
    }
    
    public void eat(String n, int m) {
        
    }
    
    // 口香糖
    public void eat(double n) {
        
    }
}

八、构造方法

是类中的一个特殊方法,用来创建对象。

特点:

  • 与类名完全相同

  • 没有返回值类型

  • 不能使用点号调用,需要使用new 关键字调用

  • 如果没有在类中定义构造方法,则编译器会自动提供无参构造方法。

public class Cat {
    String name;
    
    public Cat() {
        System.out.println("被调用");
    }
    
    // 不报错,可以存在,但是不应该如此定义一个普通方法
//  public void Cat() {
//      System.out.println("普通方法");
//  }
}
public class Demo05 {
    public static void main(String[] args) {
        Cat cat = new Cat();
    }
}

九、对象的创建过程

步骤:

  • 分配内存空间

  • 属性的初始值和默认值

  • 构造方法调用

  • 将对象的地址赋值到变量中

十、构造方法重载

可以创建带参数的构造方法,此方法传入的参数,可以使用属性来保存。

注意:如果手动创建的构造方法,那么自带的默认的无参构造方法就没有。

public class Student {
    String name;
    int age;
    
    public Student(String n) {
        // 保存传入的参数
        name = n;
    }
    
    public void introduce() {
        System.out.println("学生的姓名为:"+name+"学生的年龄为:"+age);
    }
}
​
public class Demo1 {
    public static void main(String[] args) {
        Student s = new Student("张三");
        s.introduce();
    }
}

有参构造方法可以减少给属性赋值的代码,强制要求在创建时必须要给属性赋值,才能正确使用。

public class Student {
    String name;
    int age;
    
    public Student() {
        
    }
    
    public Student(String n) {
        // 保存传入的参数
        name = n;
    }
    
    public Student(String n, int a) {
        // 保存传入的参数
        name = n;
        age = a;
    }
    
    public void introduce() {
        System.out.println("学生的姓名为:"+name+"学生的年龄为:"+age);
    }
}

十一、this关键字

当构造方法中,变量名与属性相同时,应该使用this关键字调用属性。

public class Student {
    String name;
    int age;
    
    public Student(String name, int age) {
        // 保存传入的参数
        this.name = name;
        this.age = age;
    }
    
    public void introduce() {
        System.out.println("学生的姓名为:"+name+"学生的年龄为:"+age);
    }
}

this关键字表示当前类的对象。有以下用法:

1、调用当前对象属性(如上代码)

2、调用当前对象的方法。

3、调用其他构造方法

public class Student {
    String name;
    int age;
    String sex;
    
    public Student(String name, int age) {
        // 保存传入的参数
        this.name = name;
        this.age = age;
    }
    
    public Student(String name, int age, String sex) {
        // 调用其他构造方法
        this(name, age);
        this.sex = sex;
    }
    
    public void introduce() {
        System.out.println("学生的姓名为:"+name+"学生的年龄为:"+age);
    }
    
    public void m1() {
        System.out.println("方法m1被调用,也进行自我介绍");
        // 调用当前对象的方法,哪个对象调用m1方法,this就指代哪个对象。
        this.introduce();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值