Java基础——面向对象——封装

本文详细介绍了面向对象编程中的封装概念,包括类的定义、构造器的使用、this关键字的作用以及setter和getter方法。通过实例解析了如何在Java中实现封装,强调了构造器在创建对象时的重要性,同时探讨了toString方法在对象信息输出中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面向对象的概念

面向对象(Object
Oriented)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。

类的中文意思:

就是一类的东西,如金属类,金,银,铜,铁,锡都是一个类属,都是金属。
(雷Jack搜的)
1.许多相似或相同事物的综合。
2.用于性质或特征相同或相似的事物。
3.类似。
4.姓。

类的定义

类是面向对象语言的程序设计种的概念,是面向对象编程的基础。
类的实质是一种引用数据类型。
类的构成:由属性和方法构成(成员属性和成员方法)

面向对象的三大特征

(封装 继承 多态)

封装

封装是指类的封装,将某一个的方法成员方法和成员属性封装在一个类里面,比如封装一个班的学生:

package com.yedu.cn;

public class Student {
    //Student类的成员属性
    public String name;
    public String gender;
    public int age;
    public String major;

    /**
     * Student类的成员行为方法
     */
    //学习数学
    public void studymath(){
        System.out.println("学生们正在学习!");
    }
    //学习Java
    public void studentJava(){
        System.out.println("学生们正在学习Java!");
    }
    //学习英语
    public void studentEnglis(){
        System.out.println("学生们正在学习英语!");
    }
}

构造器的概念

雷Jack的原话:
构造器的特点:
构造器就是所谓 的构造器方法,该方法与类的其它方法不同的一点就是该方法没有返回值类型,方法名称和类名完全一致,在创建类的时候如果不显示申明构造器,那么类在创建的时候会创建一个无参数的构造方法供创建对象的时候调用!如果开发人员一旦显示申明有参数的构造器之后,那么无参数的构造器将会失效,这时候必须显示申明无参数构造器,否则将无法调用无参数构造器创建对象(编译器会出错)

我的理解,构造器是类里面使用的,在某一个类里面例如学生类,如果想通过外部创建一个学生类,就需要调用一个学生构造器。构造器由无参构造器和有参构造器两种,由无参构造器创建的对象可以去通过 类名.普通实例方法() 获得该类的普通实例方法,而有参构造器就可以初始化对象,使得该对象可以获得属于的自己。
构造器的创建:(在该类里面)
public 该类类名(){};//无参数
public 该类类名(参数列表){this关键字的赋值语句};
调用类的构造器的方法: 通过new关键字调用
类名 新的对象名 = new 类名();
比如:Student stu0 = new Student();
调用类里面的实例方法:
新的对象名.方法名();
例如:stu0.studymath();
调用类里面的静态方法:
类名.静态方法名();

接下来进行测试

    @Test
    public void t1() {
        //创建Student类的对象
        Student student = new Student();
        /**
         *   此时调用的是无参构造,是Student里面默认有的,
         *   通过创建Student类的对象,你就可以通过.普通实例方法
         *   去调用Student类里面的普通方法和访问其成员属性值了;
         */
        System.out.println(student.name);
        System.out.println(student.age);
        System.out.println(student.major);
        System.out.println(student.gender);
        student.studyEnglis();
        student.studymath();
        student.studyJava();
        //调用静态方法
        Student.amuse();
//        student.asume();
// 不能通过创建的对象去调用类里面的静态方法,要通过该类名.静态方法名去调用
    }

在这里插入图片描述

package com.tude.cn;

public class Student {
    //Student类的成员属性
    public String name;
    public String gender;
    public int age;
    public String major;

    public Student(){};//未来防止创建好有参数构造器时造成无参数构造器的失效

    //创建无参构造器
    public Student(String name,String gender,int age,String major){
        //将传过来的值赋值给当前对象的属性
        /**
         * 一般来说,只要创建了某一个类的对象,那么这个对象就会拥有这个类的成员属性了
         */
        this.age = age;//this表示当前类的成员属性
        this.gender = gender;
        this.major = major;
        this.name = name;
    }

    /**
     * Student类的成员行为方法
     */
    //学习数学
    public void studymath(){
        System.out.println("学生们正在学习!");
    }
    //学习Java
    public void studyJava(){
        System.out.println("学生们正在学习Java!");
    }
    //学习英语
    public void studyEnglis(){
        System.out.println("学生们正在学习英语!");
    }
    //创建一个静态方法
    public static void amuse(){
        System.out.println("这是静态方法!!!!!!!!!!!!!");
    }
}
/**
 * 接下俩测试有参构造器
 */
@Test
public void t2(){
    //可以多个创建
    Student student1 = new Student("高读书","女",12,"数学");
    Student student2 = new Student("蓝胖子","女",13,"试吃");
    /**
     * 创建的有参构造器就可以初始化对象的成员属性
     */
    System.out.println(student1.name);
    System.out.println(student1.age);
    System.out.println(student1.major);
    System.out.println(student2.gender);
    student2.studyEnglis();
    student1.studymath();
    student2.studyJava();
    /**
     * 但是无参构造器失效了,就是不能用了,编译会出错,
     * 那么我们应该在该类里面写出无参构造器,这样就不会编译出错了,
     * 注意无参构造器和无参构造器可以同时出现在同一个类里面,
     * 有参构造器和无参构造器之间形成构造器的重载。
     */

    Student student = new Student();

}

运行结果如下:
在这里插入图片描述

this关键字的介绍

雷Jack的原话:
作用

  1. 使用在实例方法中(对象方法种,非static修饰的方法) 如果this关键字出现在实例方法种,表示调用该方法的当前对象,也就是说哪一个 对象调用该方法,那么方法黎曼出现的this就表示一个哪一个对象。
    以前说过,如何嗲用对象的方法,是通过对象名.方法名()的形式调用的,其中对象名就表示方法里面出现的this,this表示一个对象。
    2.使用在构造器里面
    a、表示调用该构造器的当前对象;昨天的知识点,创建对象是通过new关键字调用的构造器,例如 new Computer()就表示一个对象,那么构造方法里面出现的this就表示new Computer()这个对象
    b、表示当前类的其他构造器,相当于在当前构造器里面调用其它构造器,而且,只能出现在当前构造器里面的第一行;否则编译器将会出错。
    this关键字的补充:
    每一个对象的实例方法里面都会有一个关键字,相当于有一个隐含的this对象,所以在实例方法中,this对象在调用自己的其他方法或者访问自己的其它属性时可以省略。
setter and getter方法

getter 和setter 方法是 针对于类里面成员属性的权限访问修饰符是私有(private)情况时,外部类所创建的对象不能直接访问或创建该类的成员属性变量(只能在本类中访问),getter 和 setter 两种方法就可以访问或创建成员属性变量的值了。

在这里插入图片描述

测试代码如下

getter与setter方法
     一般在面向对象的编程中,属性一般私有化,方法公开化。也就是属性的访问修饰符一般使用private,方法的访问修饰符一般使用public.  方法使用public修饰以后,外界任何地方都可以调用该方法;思考一下,既然不能直接访问私有属性,那么可以不可以在类里面定义一个方法,直接操作私有呢?答案是可以的。这个方法就是getter和setter方法,getter方法用于访问对象的属性,setter方法用于修改对象的属性值。
     getter与setter的命名规则:
     get+属性名(前提是属性名的首字母大写)   set+属性名称(前提是属性名的首字母大写
@Test
public void t2(){
    Student student1 = new Student("高读书","女",12,"数学");
    System.out.println("新创建的的、年龄为:"+student1.getAge());
    System.out.println(student1.getMajor());
    System.out.println(student1.getName());
    student1.setAge(222);//改变年龄的值
    System.out.println("改变后的年龄为:"+student1.getAge());
}

运行的结果为:

在这里插入图片描述

toString方法

toString方法是创建对象将类所有的成员属性放在一个字符串中的一种普通方法,这样就避免了想得到某一个类的所有属性时,需要一个一个的用创建的对象访问,toString方法Java虚拟机里面也有现成的方法,可自己写,其格式为(如一个学生类):
public void toString(){ System.out.println("{"+属性1+","+……+“,”+属性n+"}") }

代码如下(将代码放入对象类里任何一个位置)
@Override
public String toString() {
    return "Student{" +
            "name='" + name + '\'' +
            ", gender='" + gender + '\'' +
            ", age=" + age +
            ", major='" + major + '\'' +
            '}';
}
快捷键

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值