JAVA面向对象(一)

本文深入探讨了面向对象编程的概念,包括对象、类以及它们之间的关系。对象作为类的实例,具有唯一性,类是对象的模板。以Dog类为例,解释了属性和方法的定义。同时,通过代码示例展示了类的实例化和对象比较,强调了对象在内存中的独立性。此外,文章还介绍了Person类和静态方法的使用,阐述了静态方法与非静态方法的调用规则。
摘要由CSDN通过智能技术生成

一.概念

面向对象:

面向对象(Object Oriented)是软件开发方法,一种编程范式。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。

面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。

对象

万物皆对象,客观存在的事物都是对象

对象是类的一个实例(对象不是找个女朋友),有属性和行为。

对象具有唯一性,对象是由类创建的,先有类,才有对象,对象是由类实例化的。

例如,一条狗是一个对象,它的属性有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。

类是对象的类型,是一个模板,它描述一类对象的状态(属性)行为(方法)

类定义了一种抽象数据类型,类是具有相同属性和方法的一组对象的集合。

下图中汽车类(class),而具体的每辆车为该汽车类的对象(object),对象包含了汽车的颜色、品牌、名称等。

对象的属性:

属性:对象具有的各种特征,每个对象的属性有具有特定的值,可以理解为对某类事物的描述

  1. 注意:对象的属性既具有默认值,这个默认值与相对的类型相关

    数据类型默认值
    byte0
    short0
    int0
    long0
    double0.0
    float0.0
    char空字符
    booleanfalse
    Stringnull

拿一条狗来举例,它的状态有:名字、品种、颜色,行为有:叫、摇尾巴和跑。 

先创建一个Dog类,标注它的属性(特征即属性)和方法(行为即方法) 

public class Dog {
    /**
     * 品种
     */
    String breed;
    /**
     * 尺寸
     */
    int size;

    /**
     * 颜色
     */
    String color;

    /**
     * 年龄
     */
    int age;

    public void eat(){

    }

    public void run(){

    }

    public void sleep(){

    }
}

然后在 Test包中 实例化出两个对象(dog01和dog02)

输出并判断它们是否相等

结果肯定为false

/**
 * @author lzy
 * @version 1.0.0 2022/4/20 11:15
 */
public class DogTest {

    @Test
    public void test01(){
        Dog dog = new Dog();
    }
    @Test
    public void test02(){
        Dog dog01 = new Dog();
        Dog dog02 = new Dog();
        System.out.println(dog01 == dog02);
    }

    @Test
    public void test03(){
        Dog dog01 = new Dog();
        Dog dog02 = new Dog();
        System.out.println(dog01 == dog02);
    }

}

 原因:

栈中的dog01会指向堆中的newDog(),栈中的dog02会指向堆中的一个新newDog(),

dog01 和  dog02在堆中的存储空间地址不同,因为是一一对应的关系,

所以会出现两个newDog()存储空间,所以二者不会相等。

 

类和对象的关系: 

类是对象的抽象,仅仅是一个模板,在现实世界中是不存在的;而对象是具体的实例,是类这个模板的具体实例。

二.实例

先创建一个Person类,标注它的属性(特征即属性)和方法(行为即方法)

然后给sleep方法加上static静态修饰符

package com.lzy.bean;

/**
 * @author lzy
 * @version 1.0.0 2022/4/20 10:01
 */
public class Person {
    public static void main(String[] args) {
        sleep();
    }
    /**
     * 昵称
     */
    String nickname;
    /**
     * 性别 1代表男 0代表女
     */
    int gender;
    /**
     * 年龄
     */
    int age;


    public void eat(){
        System.out.println("民以食为天");
        drink();
    }

    public void drink(){
        System.out.println("我们是什么,我们是兄弟,这酒怎么喝,你干了我随意");
        sleep();
    }

    public static void sleep(){
        System.out.println("养精蓄锐");
    }

}

然后再在  测试包(PersonTest)   里调用一下我们创建好的Person类里的方法 

package com.lzy.bean;

import org.junit.jupiter.api.Test;

/**
 * 静态方法可以通过类名点方法名的方式调用<br>
 * 但是不能通过类名点方法名的方式调用非静态方法<br>
 * 可以通过类的实例化对象名点方法名的方式调用静态方法<br>
 * 也可以通过类的实例化对象名点方法名的方式调用非静态方法<br>
 * 静态方法可以调用静态方法但是无法直接调用非静态方法
 * 非静态方法可以调用非静态方法与可以调用静态方法
 * @author lzy
 * @version 1.0.0 2022/4/20 10:01
 */
public class Person01Test {
    @Test
    public void test01() {
        // 静态方法可以通过类名点方法名的方式调用
        // 但是不能通过类名点方法名的方式调用非静态方法
        Person.sleep();
    }

    @Test
    public void test02() {
        // 静态方法可以通过类名点方法名的方式调用
        // 但是不能通过类名点方法名的方式调用非静态方法
        Person.sleep();
        Person person01 = new Person();
        // 可以通过类的实例化对象名点方法名的方式调用静态方法
        // 也可以通过类的实例化对象名点方法名的方式调用非静态方法
        person01.eat();
        person01.drink();
        person01.sleep();
    }
}

静态方法: 

1.静态方法可以通过类名点方法名的方式调用

2.可以通过类的实例化对象名点方法名的方式调用静态方法

3.静态方法可以调用静态方法但是无法直接调用非静态方法

非静态方法:

1.不能通过类名点方法名的方式调用非静态方法

2.可以通过类的实例化对象名点方法名的方式调用非静态方法

3.非静态方法可以调用非静态方法也可以调用静态方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值