基础学习day05---面向对象一类,对象、封装

一、面向对象

 

1.1、面向对象的概念

很经典的一句话----------万物皆对象

定义:面向对象一相对面向过程而言的

面向对象和面向过程都是一种思想

面向过程------强调的是功能行为  语言:C语言

面向对象------将功能封装进对象,强调具备了功能的对象。

面向对象是基于面向过程的。

1.2、什么是类

我肯定说,不知道、不清楚。

简单讲类是java中的基本单元,类是具有相同特性和行为的对象集合

1.3、类的定义

class 类名{

数据类型  属性 ;

….

public 返回值的数据类型 方法名称(参数1,参数2…){

程序语句 ;

[return 表达式;]

}

}

1.4、类包含

类中包含成员和行为(方法)


package com.pb.demo2;
/*
 * 人类
 */
public class Person {   //Persion为类名
    /*
     * 属性,name,sex,age
     */
            public String     name;     //名字
            public String     sex ;        //性别
            public int         age;        //年龄

            /*
             *方法(行为)
             */
            //吃饭
            public void eat(){
                System.out.println("吃饭");
            }
            //工作
            public void work(){
                System.out.println("工作");
            }
}

1.5、三大特征

封装、继承、多态

二、类和对象关系

2.1、类和对象

类就是对现实生活中事物的描述。

对象就是这些事物,实实在在的个体

package com.day05;

/**
 * 汽车类
 *
 * @author Denny 属性对应类中变量 行为对应类中的函数(方法) 定义类就是在描述事物,就是在定义属性和行为
 *         属性和行为共同成为类中的成员变量(成员变量和方法)
 */
public class Car {

    // 颜色
    String color = "红色";
    // 轮胎
    int num = 4;

    // 运行跑起来的行为
    public void run() {

        //局部变量
        //int num=10;
        System.out.println(color + "   " + num);
    }

    public static void main(String[] args) {

        Car c = new Car();// 声明汽车对象c
        c.color = "黄色"; // 更改属性值
        c.num = 8;
        c.run(); // 调用方法

        Car c1=c;
        c1.color="白色";
        c1.num=6;
        c.run();
    }
}

结果:

黄色   8
白色   6

2.2、成员变量和局部变量

作用范围
      成员变量作用于整个个类中
      局部变量作用于方法或者文句中
在内存中的位置
     成员变量在堆内存
     局部变量在栈内存

使用this.成员变量 调用成员变量

局部变量直接使用变量名

如果成员变量和局部变量同名,且没有使用this关键字调用,在同一个方法中默认使用局部变量

2.3、匿名对象

package com.day05;

/**
 * 汽车类
 *
 * @author Denny 属性对应类中变量 行为对应类中的函数(方法) 定义类就是在描述事物,就是在定义属性和行为
 *         属性和行为共同成为类中的成员变量(成员变量和方法)
 *         作用范围
 *         成员变量作用于整个个类中
 *         局部变量作用于方法或者文句中
 *         在内存中的位置
 *         成员变量在堆内存
 *         局部变量在栈内存
 */
public class Car {

    // 颜色
    String color = "红色";
    // 轮胎
    int num = 4;

    // 运行跑起来的行为
    public void run() {

        //局部变量
        //int num=10;
        System.out.println(color + "   " + num);
    }

    public static void main(String[] args) {
        new Car().num=99;
        new Car().color="blue";
        new Car().run();
    }
}

红色   4

匿名对象,对一个的方法调用一次时, 可以使用。

对一个对象进行多次调用时,要声明对象

第二种方式:

匿名对象可以做为参数传递

三、封装

3.1、隐藏对象的属性和实现细节,公对外提供公共的访问方式。

好处:

将变化隔离

便于使用

提高重用性

提高安全性

封装原则:

将不需要对外提供的内容隐藏起来

把属性都隐藏,提供公共方法对其访问

package com.day05;

/**
 * 人类
 *
 * @author Denny
 *
 */
public class Person {

    private String name; // 姓名
    private int age; // 年龄
    private String gender; // 性别

    // 自我介绍的方法
    public void say() {
        System.out.println("姓名:" + this.name + "    年龄:" + this.age + "  性别:" + this.gender);
    }

    // getter、setter方法 提供的对外的访问
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        // 检查年龄是不是在0-150之间
        if (age >= 0 && age <= 150) {
            this.age = age;
        } else {
            System.out.println("年龄不合法!");
        }
    }

    public String getGender() {

        return gender;
    }

    public void setGender(String gender) {
        // 检查条件
        if (gender.equals("男") || gender.equals("女")) {
            this.gender = gender;
        } else {
            System.out.println("性别不合法只能是男或者女!");
        }
    }

    public static void main(String[] args) {
        Person p = new Person();
        p.setName("张三");
        p.setAge(-20);
        p.setGender("人妖");
        p.say();
    }

}

结果:

年龄不合法!
性别不合法只能是男或者女!
姓名:张三    年龄:0  性别:null

3.2、访问修饰符

四、构造函数

4.1、构造方法定义

构造方法的主要目的是为类中的属性初始化

class 类名称{

访问权限 类名称(类型1 参数1,类型2 参数2,…){

程序语句 ;

…    // 构造方法没有返回值

}

}

在构造方法的声明中读者一定要牢记以下几点:

· 构造方法的名称必须与类名称一致

· 构造方法的声明处不能有任何返回值类型的声明

· 不能在构造方法中使用return返回一个值

例:

每个类中肯定都会有一个构造方法

如果一个类中没有声明一个明确的构造方法则会自动生成一个无参的什么都不做的构造方法

public class Person {

    private String name; // 姓名
    private int age; // 年龄
    private String gender; // 性别

    public Person() { //无参数构造方法

    }
//实现构造方法重载
    public Person(String name, int age, String gender) {  //有参数构造方法

        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    // 自我介绍的方法
    public void say() {
        System.out.println("姓名:" + this.name + "    年龄:" + this.age + "  性别:" + this.gender);
    }

    // getter、setter方法 提供的对外的访问
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        // 检查年龄是不是在0-150之间
        if (age >= 0 && age <= 150) {
            this.age = age;
        } else {
            System.out.println("年龄不合法!");
        }
    }

    public String getGender() {

        return gender;
    }

    public void setGender(String gender) {
        // 检查条件
        if (gender.equals("男") || gender.equals("女")) {
            this.gender = gender;
        } else {
            System.out.println("性别不合法只能是男或者女!");
        }
    }

}

public static void main(String[] args) {
        Person p = new Person("张三",13,"男");//调用有参数的构造方法
        p.say();
        }
    }

4.2、构造代码块

package com.day05;

/**
 * 人类
 *
 * @author Denny
 *
 */
public class Person {

    private String name; // 姓名
    private int age; // 年龄
    private String gender; // 性别

    /*
     * 构造代码块:
     * 作用:给对象进行初始化
     * 对象 一建立就运行,而且优先于构造方法执行
     * 构造代码块是给所有对象进行统一初始化
     * 构造方法是给对应的对象初始化
     */
    {

        System.out.println("这是Person 的构造代码块");
    }

    public Person() {

    }

    public Person(String name, int age, String gender) {

        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    // 自我介绍的方法
    public void say() {
        System.out.println("姓名:" + this.name + "    年龄:" + this.age + "  性别:" + this.gender);
    }

    // getter、setter方法 提供的对外的访问
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        // 检查年龄是不是在0-150之间
        if (age >= 0 && age <= 150) {
            this.age = age;
        } else {
            System.out.println("年龄不合法!");
        }
    }

    public String getGender() {

        return gender;
    }

    public void setGender(String gender) {
        // 检查条件
        if (gender.equals("男") || gender.equals("女")) {
            this.gender = gender;
        } else {
            System.out.println("性别不合法只能是男或者女!");
        }
    }

    public static void main(String[] args) {
        Person p = new Person("张三",13,"男");
        Person p1=new Person();

    }

}

结果:

这是Person 的构造代码块
这是Person 的构造代码块

五、this关键字

5.1、this关键字作用

调用成员变量

当成员变量和局部变量同名时,优先使用局部变量,如果要调用成员变量

当成员变量和局部变量同名时,要调用成员变量可以使用this.成员变量名 来调用成员变量

// 自我介绍的方法
	public void say() {
		System.out.println("姓名:" + this.name + "    年龄:" + this.age + "  性别:" + this.gender);
	}

this:代表什么?

本类的对象,到底代表哪一个?

this代表它所在函数所属对象的引用。

哪个对象在调用的this所在的函数,this就代表哪个对象.

package com.day05;

/**
 *
 * @author Denny this 语句的调用
 */
public class Person1 {
    private String name; // 姓名
    private int age; // 年龄

    public Person1() {

    }

    public Person1(String name) {
        this.name = name; // 为本对象name赋值

    }

    public Person1(String name, int age) {
        // 在构造方法中调用另一个构造方法时this必须放在第一行
        this(name); // 调用另一个构造方法
        this.age = 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;
    }
    // 自我介绍的方法
        public void say() {
            System.out.println("姓名:" + this.name + "    年龄:" + this.age);
        }
    public static void main(String[] args){
        //声明一个参数的对象
        Person1 p1=new Person1("张三");
        p1.say();
        Person1 p2=new Person1("张三",25);
        p2.say();

    }

}

结果:

姓名:张三    年龄:0
姓名:张三    年龄:25

时间: 2024-10-07 23:07:29

基础学习day05---面向对象一类,对象、封装的相关文章

java基础学习总结——面向对象1

目录 一.面向过程的思想和面向对象的思想 二.简单理解面向对象 三.面向对象的设计思想 四.对象和类的概念 五.如何抽象出一个类? 六.类(对象)之间的关系 七.Java与面向对象 八.为什么使用面向对象编程? 一.面向过程的思想和面向对象的思想 面向对象和面向过程的思想有着本质上的区别, 作为面向对象的思维来说,当你拿到一个问题时,你分析这个问题不再是第一步先做什么,第二步再做什么,这是面向过程的思维,你应该分析这个问题里面有哪些类和对象,这是第一点,然后再分析这些类和对象应该具有哪些属性和方

java基础学习05(面向对象基础01--类实例分析)

面向对象基础01(类实例分析) 实现的目标 1.如何分析一个类(类的基本分析思路) 分析的思路 1.根据要求写出类所包含的属性2.所有的属性都必须进行封装(private)3.封装之后的属性通过setter和getter设置和取得4.如果需要可以加入若干构造方法 5.再根据其它要求添加相应的方法6.类中的所有方法都不要直接输出,而是交给被调用处调用 Demo 定义并测试一个名为Student的类,包括属性有"学号"."姓名"以及3门课程"数学".

java基础学习——对面向对象的重识

最近几天在看java的视频,感觉很多东西java语法上很像c#,但是还是有很多内容惊到我: 1,java虚拟机 用过VMWar或者VirtualBox的童鞋都对"虚拟机"这个词有个大致的了解,虚拟机提供了个虚拟的平台,让我们可以模拟一些脱离硬件的环境.java里的虚拟机起到了一个类似以前学过的ODBC驱动程序的作用,它屏蔽了底层的差异,让操作系统通过虚拟机向下面看去,操作系统的感觉都是一样的. 有了这一层东西,我们彻底解开了底层硬件和运行操作系统之间的耦合,实现了一次编译,到处运行的梦

java基础学习_面向对象(上)01_day07总结

==========================================================================================================================================================涉及到的知识点有:1:面向对象(掌握) (0)面向过程和面向过程开发 (1)面向对象思想概述 (2)面向对象的思想特点 (3)把大象装进冰箱(理解) (4)类与对象的关系 (5)类的定义及使用

python基础学习日志day6-面向对象

什么是面向对象编程 OOP编程是利用"类"和对象来创建各种模型来实现对真实世界的描述. OOP具有可维护性和可扩展性 二:面向对象有那些特性 1)CLASS类:一个类是对拥有相同属性的对象的抽象.类拥有类的属性和类的方法. 2)OBJECT对象:一个对象即是一个类的实例化的实例.这个过程就实例化. 3)Encapsulation封装:在类中对数据的赋值,内部调用对外部是透明. 4)Inheritance继承:一个类可以派生成子类,在这个父类的定义的属性和方法自动被子类继承 5)Poly

java基础学习05(面向对象基础02)

面向对象基础02 实现的目标 1.String类的使用 2.掌握this关键字的使用3.掌握static关键字的使用 String类 实例化String对象一个字符串就是一个String类的匿名对象,就是已经开辟了堆内存空间的并可以直接使用的对象.1.采用直接赋值的方式进行操作. String name = "zhangsan"; 使用这种方式,如果一个字符串已经被一个名称所引用,则以后再有相同的字符串声明时,就不会再开辟内存空间.2.直接调用String类的构造方法(public S

javascript(js)基础3:.js面向对象三大特征(封装、继承、多态) and 内部类.js系统函数

封装<script language="JavaScript"> function Person(name,age,sal){ this.name=name;//公开属性 this.age=age; this.sal=sal; sal=sal;//私有属性 //如何定义公开方法(特权方法)和私有方法 //如果我们希望操作私有的属性,则使用公开方法 this.show=function(){ window.alert(age+sal) } //私有方法,可以访问对象的属性(只

java基础学习_面向对象(上)03_day08总结

==========================================================================================================================================================涉及到的知识点有:0:前面学习通过方法对代码进行改进,为什么要给方法使用静态呢?1:Java如何制作帮助文档(API)(了解)2:通过JDK提供的帮助文档(API)学习了Math类(掌握)3:

Java基础学习(二)——对象

类:是抽象的概念集合,表示的是一个共性的产物,类之中定义的是属性和行为(方法): 对象:对象是一种个性的表示,表示一个独立的个体,每个对象拥有自己独立的属性,依靠属性来区分不同对象. 对象=实例 对象本身已知的事物:实例变量(instance variable) 对象可以执行的动作:方法(method) 类≠对象 类是用来创建对象的模型 继承机制使子类可以通过继承父类代码来减少重复代码,覆盖机制使子类在不必改动父类的同时可以选择实现自己的方法. 对象类+测试对象类 测试用的类类名="受测试类名&

java基础学习_面向对象(上)02_day07总结

==========================================================================================================================================================涉及到的知识点有:---------------------------------------------------------------------------------------