类和对象详解

作者:佳佳要学习
时间:2022年12月20日
本章内容:类和对象
作者想说:如本文有错误之处,可以留言,感谢!

1️⃣. 初识面向对象

1.1 三个理解

①. 记住 OOP :Object Oriented Program

②. 含义 :面向对象是 解决问题的 一种思想,主要依靠对象之间交互完成一件事情

③. 要区别 面向过程 与 面向对象 的 区别

我想用一张图来解释 (小刚今天饿了,需要一份煎饼):图1

总结:面向过程 是 注重的是做煎饼的过程,少一条步骤都不可以。

​ 面向对象 是 小刚去食堂窗口告诉阿姨,需要一份煎饼。不需要知道怎么做煎饼!

2️⃣. 类定义和使用

面向对象程序设计关注的是 对象,而对象是 现实生活中的实体。比如:金毛犬。开发人员通过代码来 描述金毛犬,从而计算机来认识。

图2

2.1 简单认识类

类 是用来对一个对象来进行描述的,主要描述该对象具有哪些属性(外观尺寸),哪些功能(用来干啥),描述完成后计算机就可以识别了。

比如:金毛犬。

属性:名字,年龄,性别…

行为:玩球,睡觉,吃饭…

2.2 类的定义格式

在Java中定义类时需要用到class关键字:

class ClassName{
    field; //成员变量
    method; //成员方法
}

class是定义类的关键字, ClassName是类的名字,{}中为类的主体。

class Dog{
    public String name; //名字
    public int age;//年龄
    public String sex; //性别
    
    public void wangwang(){
        System.out.println("旺旺!");
    }
    public void sleep(){
        System.out.println("睡觉!");
    }
    public void eat(){
        System.out.println("吃饭!");
    }
}

3️⃣. 类的实例化

3.1 什么是实例化

用 类 类型创建对象的过程,称为 类的实例化。关键字:new

class Dog{
    public String name; //名字
    public int age;//年龄
    public String sex; //性别

    public void wangwang(){
        System.out.println(name+"今年"+age+"岁了,它是一个小"+sex+"狗,它正在叫!");
    }
    public void sleep(){
        System.out.println(name+"今年"+age+"岁了,它是一个小"+sex+"狗,它正在睡觉!");
    }
    public void eat(){
        System.out.println(name+"今年"+age+"岁了,它是一个小"+sex+"狗,它正在吃饭!");
    }
}

public class Test3 {

    public static void main(String[] args) {
        
        //通过new关键字去实例化 狗 类
        Dog jinmao = new Dog();

        //对成员属性赋值
        jinmao.name = "球球";
        jinmao.age = 3;
        jinmao.sex = "公";

        //调用成员方法
        jinmao.eat();

        Dog dog2 = new Dog();
        dog2.name = "方方";
        dog2.age = 5;
        dog2.sex = "母";
        dog2.sleep();

    }
}


输出结果:
   	球球今年3岁了,它是一个小公狗,它正在吃饭!
	方方今年5岁了,它是一个小母狗,它正在睡觉!

注意:

①. new关键字用于创建一个对象实例

②. 使用 . 来访问对象中的属性和方法

③. 同一个类可以创建多个实例

3.2 类和对象的说明

  1. 类可以看做一个模型,对一个实体进行描述。

  2. 类是一种自定义类型,可以用来定义变量。

  3. 一个类可以实例化多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量。

  4. 更好理解的方法:类实例化出对象 就像现实中使用 图纸 建造房子,类就是设计图,房子就是根据图纸实例化出来的

注意:

  • 一般一个文件当中值定义一个类

  • main方法所在的类一般要使用pubilc修饰。

  • public修饰的类必须要和文件名相同

  • 不要轻易去修改public修饰的类的名称。

  • 一个java文件只能有一个public类

3.3 成员赋值的几个小问题

  1. 成员变量没有赋值,直接使用不会报错

    引用类型null
    int float对应的0值。
    boolean默认值false。
    char的默认值‘\u0000’
  2. 当一个引用 赋值为null 的时候,表示这个引用 不指向任何对象

  3. 引用 能不能指向 引用? 不能

    引用不能指向引用,引用是指向对象的。

      public static void main(String[] args) {
            Dog dog1 = new Dog();
            Dog dog2 = new Dog();
            dog1 = dog2;
        }
    

图3

dog1引用 指向了 dog2这个引用 指向的对象

  1. 一个引用 能不能 同时指向多个对象?不能

4️⃣. this关键字

4.1 含义

this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问。

4.2 this给当前对象赋值

加上this 来表示:给当前对象 赋值

注意:this 只能在成员方法中使用

class Dog{
    public String name; //名字
    public int age;//年龄
    public String sex; //性别

    public Dog(){
    }   
    
    //this关键字,给当前对象赋值
    public Dog(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
}

public class Test3 {
    public static void main(String[] args) {
        Dog dog1 = new Dog("球球",5,"公");
        System.out.println(dog1);
    }
}

输出结果:Dog{name='球球', age=5, sex='公'}

4.3 this访问构造方法

class Dog {
    public String name; //名字
    public int age;//年龄
    public String sex; //性别

    //this 调用当前对象的其他构造方法。
    public Dog() {
        //必须放在第一行
        //必须在构造方法中使用
        this("乐乐", 4, "母");
    }

    public Dog(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }
}

public class Test3 {
    public static void main(String[] args) {
        Dog dog2 = new Dog();
        System.out.println(dog2);
    }
}

输出结果:Dog{name='乐乐', age=4, sex='母'}

注意:不能形成环

    //这样就是错的!!!
	public Dog() {
        this("乐乐", 4, "母");
    }

    public Dog(String name, int age, String sex) {
       this();
    }

4.4 this访问成员方法

    public Dog(String name, int age, String sex) {
        //1. 调用当前对象的其他构造方法
        this();
        //2. 访问当前对象的成员变量
        this.name = name;
        this.age = age;
        this.sex = sex;
        
        //3. 访问当前对象的成员方法
        this.sleep();
    }

5️⃣. 封装

5.1 含义与意义

答:把类的实现细节进行了隐藏,对外只提供一些交互的接口就可以。

5.2 访问权限符

No范围private默认protectedpublic
1同一包中的同一类
2同一包中的不同类
3不同包中的子类
4不同包中的非子类

5.3 封装

第一步:成员变量的权限是 比较小的。外界不能直接访问该类中的成员变量。

第二步:因为,需要给该类的成员变量进行 赋值获取值,从而有了 Getter和Setter方法,进行对该成员变量进行操作。

第三步:toString方法,当你想要输出一个对象的引用的值的时候,如果你没有自己写toString方法,那么就会调用Object这个类的方法。如果写了,就用自己的。

class Cat{
    //第一步:为了数据的安全性,将成员变量设置为 private
    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) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Cat{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    
}

6️⃣. 区分成员/方法

1. 静态成员变量

  1. 成员变量是使用static修饰的,静态的不依赖于对象。

  2. 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问

    class Cat{
        public static String type = "猫";
    }
    
    public class Test3 {
        public static void main(String[] args) {
            //直接使用类名 访问静态成员变量
            System.out.println(Cat.type);
        }
    }
    
    输出:猫
    
  3. 类变量存储在方法区当中

  4. 生命周期伴随类的一生

2. 普通成员变量

不用 static修饰

3. 静态成员方法

  1. 只要是用 static 修饰的,都不属于对象,可以用对象调用(会警告)
  2. 也可以用类名来调用
  3. 在静态方法内部,不能直接调用非静态的成员方法(实例化对象,在调用他的成员方法)
  4. 在静态方法内部,不能使用非静态的成员变量(实例化对象,在调用他的成员变量)
  5. 在静态方法内部,不能使用this

4. 普通成员方法

可以使用静态 的 成员方法

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值