面向对象(一):面向对象的概述,类和对象的关系,构造方法以及构造方法的重载

面向对象的概述

面向对象是一种符合人类思维习惯的编程思想。在程序中使用对象来映射现实中的事物,使用对象的关系来描述事物之间的联系,这种思想就是面向对象。面向对象是把构成问题的事物按照一定规则划分为多个独立的对象,然后通过调用对象的方法来解决问题。当然,一个应用程序会包含多个对象,通过多个对象的相互配合即可实现应用程序所需的功能。
面向对象的三个特点是:封装,继承,多态

  • 封装

    封装是面向对象的核心思想,将对象的属性和行为封装起来,不需要让外界知道具体实现细节,这就是封装思想

  • 继承

    继承主要描述的就是类与类之间的关系,通过继承,可以在无需重新编写原有类的情况下,对原有类的功能进行拓展。继承不仅增强了代码的复用性,提高了开发效率,还为程序的维护补充提供了便利。

  • 多态

    多态指的是在一个类中定义的属性和方法被其他类继承后,当把子类对象直接赋值给父类引用变量时,相同引用类型的变量调用同一个方法所呈现出多种不同的行为特性,不同的对象所表现出的行为是不一样的

值传递和引用传递

值传递

package com.wang.oop;

//值传递
public class Demo1 {
    public static void main(String[] args) {
        int a = 1;
        System.out.println(a);

        System.out.println("=============");

        //调用方法
        change(a);
        System.out.println(a);
    }

    //定义一个方法,返回值为空
    public static void change(int a) {
        a = 10;
    }
}

引用传递

package com.wang.oop;

//引用传递:对象,本质还是值传递
public class Demo2 {
    public static void main(String[] args) {

        Person person = new Person();
        System.out.println(person.name);//null

        System.out.println("===============");

        change(person);
        System.out.println(person.name);//哈哈
    }


    public static void change(Person person) {
        person.name = "哈哈";
    }

}

//定义了一个Person类,有一个属性:name
class Person {
    String name;//null
}

类和对象

​ 类是一种抽象的数据类型,它是对某一类事物整体描述,但不能代表某一个具体的事物。类是对某一类事物的抽象描述,而对象用于表示现实中该事物具体的个体,也就是实例化

​ 类是对象的抽象,他用于描述一组对象的共同特征和行为。以面向对象的编程思想,将某一类中共同的特征和行为封装起来,把共同特征作为类的属性(也叫成员变量),把共同行为称作类的方法(也叫成员方法)。

Java中的类是通过class关键字定义的:
	修饰符 class 类名 {
        //类体,包括类的成员变量和成员方法
    }

修饰符可以是public,也可以不写(默认),类名首字母要大写,要符合命名规范。大括号{}的内容是类体,是需要在类中编写的内容,主要包括成员变量和成员方法。
类的成员变量(属性)的格式:
	修饰符 数据类型 变量名;
	
类的成员变量也称作类的属性,用于描述对象的特征。修饰符为可选项,用于指定变量的访问权限其值可以是public,private。变量可以赋初始值,也可以不赋值。

对象

Java程序中可以使用 new 关键字来创建对象,格式:
    类名 对象名 = new 类名();
	Person person = new Person();

"new Person()"用于创建Person类的一个实例对象,"Person person"则是声明了一个Person类型的变量person,
中间的等号将 Person 对象在内存中的地址赋值给变量person,这样变量person就持有了对象的引用。在创建Person对象时,程序会占用两块内存区域,栈内存和堆内存。Person类型的变量person被存放在栈内存中,它是一个引用,会指向真正的对象;通过 new Person() 创建的对象则放在堆内存中,这才是真正的对象。可以通过"对象名.属性名"的方式来访问对象的属性或给属性赋值。
package com.wang.demo;

//主程序
public class Application {
    public static void main(String[] args) {
        /*
        * 使用 new 关键字创建对象,也就是Student类的实例化
        * */
        Student stu1 = new Student();
        Student stu2 = new Student();

        /*
        * 在没有对类中的属性赋值时,会有默认值
        * */
        System.out.println(stu1.name);//null
        System.out.println(stu2.age);//0

        System.out.println("==============");

        //使用 "对象名.属性"的方式给属性赋值
        stu1.name = "小明";
        stu1.age = 10;
        stu2.name = "小红";
        stu2.age = 10;

        System.out.println(stu1.name + stu1.age + "岁");
        System.out.println(stu2.name + stu2.age + "岁");

        //使用 "对象名.方法名"的方式调用类中的方法
        stu1.study();
        stu2.study();
    }
}

=======================================================================
    
package com.wang.demo;

/**
 * 定义一个Student类,
 * 类中只允许有属性和方法
 */
public class Student {
    //属性:也可以称为字段
    String name;//null
    int age;//0

    //方法
    public void study() {
        System.out.println(name + "在学习!");
    }
}

构造器

​ 如果在实例化对象的同时就为这个对象的属性进行赋值,可以通过构造器实现。构造器,也叫构造方法,它在类实例化对象的时候被自动调用。

构造器的语法格式:
    修饰符 方法名(参数列表) {
    	//方法体
	}
定义构造器的时候要同时满足以下条件:
    1.方法名必须与类名相同
    2.在方法名的前面没有返回值类型的声明,void也不能写
    3.在方法中不能使用return语句返回一个值,但是可以单独写return语句作为方法的结束
    
构造器的作用:
    1.使用 new 关键字实例化(创建)对象
    2.可以对属性进行初始化赋值
    
快捷键:Alt + Insert

​ 在一个类中除了可以定义无参数的构造方法外,还可以定义有参数的构造方法,通过有参数的构造方法就可以实现对属性的赋值。在类中,程序会隐式的声明一个默认的无参构造方法,但是,若我们定义有参构造,那么无参构造就会被覆盖,我们必须要再显式的声明一个无参构造方法。

package com.wang.demo1;

//主方法
public class Application {
    public static void main(String[] args) {
        //使用 new 关键字实例化了一个对象
        Person person = new Person("哈哈");

        System.out.println(person.name);
    }
}

=============================================
    
package com.wang.demo1;

public class Person {
    //一个类中默认有一个隐式的无参构造

    String name;

    /*
      无参构造方法
      1.使用new关键字实例化对象
      2.
    */
    public Person() {

    }

    /*
    * 有参构造
    * 一旦定义了有参构造,无参构造就必须显式的定义
    * */
    public Person(String name) {
        this.name = name;
    }
}

构造方法的重载

​ 与普通方法一样,构造方法也可以重载,在一个类中可以定义多个构造方法,只要每个构造方法的参数类型或参数个数不同即可。在创建对象时,可以通过调用不同的构造方法,来为不同的属性进行赋值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章