JavaSE基础入门_007_面向对象

面向对象

 

什么是对象

什么是程序

  • 程序是为了模拟现实世界,解决现实问题而使用计算机语言编写的指令集和.

实现世界的组成

  • 世界是由什么组成的?

    • 有人说: "世界是由无数原子组成的"

    • 有人说: "世界是由无数事物组成的"

    • 有人说: "世界是由无数物体组成的"

    • .......

  • 在程序员的眼里, 世界的组成最为明确: "世界是由无数个对象组成的"

什么是对象

  • 面向对象思想(Object Oriented Programming)

    • 一切客观存在的事物都是对象, 万物皆对象.

    • 任何对象, 一定具有自己的特征[有什么]行为[能做什么].

      • 特征: 称为属性, 一般为名词, 代表对象有什么.

      • 行为: 称为方法, 一般为动词, 代表对象能做什么.

现实中的对象

  • 手机:

    • 属性: 材料, 屏幕亮度, 品牌, 价格.....

    • 方法: 打电话, 发短信.....

程序中的对象

  • 如何使用程序模拟现实世界, 解决现实问题 ?

    • 首先, 在程序中, 必须具有和显示中相同的对象, 用以模拟现实世界.

    • 然后, 使用程序中的对象代表现实中的对象, 并执行操作, 进而解决现实问题 .

  • 现实中的对象多数来自于"模板", 程序中的对象也应该具有"模板".

 

什么是类

  • 等价于现实对象的"模板".

  • 程序中的模板称为"类", 按照"类"创造出来的实体, 就是程序中的对象.

类的抽取

  • 在一组相同或类似的对象中, 抽取出共性的特征和行为, 保留所关注的部分.

  • 具体操作:

    1. 明确现实中的对象

    2. 抽取共性(一组相同或类似的对象中)

    3. 程序中定义模板(类)

    4. 创建程序中的对象(实例)

    5. 用程序中的对象模拟(代表)现实中的对象

 

类的组成

类的定义

public class Dog // 类名
{
   String breed; //属性: 通过变量表示, 又称实例变量
   int age; //语法: 数据类型 属性名;
  //位置: 类的内部, 方法的外部
   
   
   public void eat() //方法: 通过函数表示,又称实例方法
  { //语法:
       System.out.println("eatting"); //public 返回值 方法名(形参){//方法主体} 不写static
  }
}
  • 一个类[模板]定义出来, 就是一种类型.

对象的创建

public class TestObject // 测试类
{
public static void main(String[] args)
{
//数据类型 变量名 = 值;
Dog myDog = new Dog(); // 基于Dog类创建对象
myDog.breed = "Hasiki"; // 访问属性: 对象名.属性名 = 值; // 赋值

System.out.println(myDog+"\t"+myDog.breed); // 访问属性: 对象名.属性名; //取值
  }
  • 将对象保存在相同类型的myDog变量中, myDog变量称为"对象名"或"引用名"

类与对象的关系

类: 模板 ( 一个 ) =======创建========>> 对象: 实例 ( 多个 )

  • 类: 定义了对象应该具有的特征和行为, 类是对象的模板

  • 对象: 拥有多个特征和行为的实体, 对象是类的实例

实例变量与局部变量的区别

 局部变量实例变量
定义位置 方法或方法内的结构当中 类的内部, 方法的外部
默认值 无默认值 字面值(同数组类型的默认值)
使用范围 从定义行到包含其结构结束 本类有效
命名冲突 不允许重名 可与局部变量重名, 局部变量优先

实例方法

  • 对象的实例方法包含两部分: 方法的声明和方法的实现

    • 方法的声明:

      • 代表对象能做什么

      • 组成: 修饰符    返回值类型    方法名(形参列表)
           public void sleep(int hour) // 声明
              {
                   System.out.println("休息"+hour+"小时"); // 实现
              }
  • 方法的实现:

    • 代表对象怎么做: 即如何实现对应的功能

    • 组成: {}

 

方法重载

  • 有些情况下, 对象的同一种行为可能存在多种实现过程.

  • 例如: 人对象的吃行为, 吃饭和吃药的过程就存在差异.

  • 重载(Overload): 一个类中定义多个相同名称的方法

  • 要求:

    • 方法名称相同

    • 参数列表不同(类型, 个数, 顺序)

    • 与修饰符, 返回值类型无关

  • 调用带有重载的方法时, 需要根据传入的实参去找到与之匹配的方法

  • 好处: 屏蔽使用差异, 灵活, 方便

 

构造方法

  • 构造方法: 类中的特殊方法, 主要用于创建对象

  • 特点:

    • 名称与类名完全相同(包括大小写)。

    • 没有返回值类型。

    • 创建对象时,出发构造方法的调用,不可通过句点手动调用。

    • //无参构造方法:
      public Student()
      {
      System.out.println("Student()");
      }

 

  • 注意:如果没有在类中显示定义构造方法,则编译器默认提供无参构造方法。

对象创建过程

  • 对象的创建过程:

    • 内存中开辟对象空间

    • 为各个属性赋予初始值

    • 执行构造方法中的代码

    • [将对象的地址赋值给变量] // [ ]: 内容有时可省

构造方法重载

  • 构造方法也可重载, 遵循重载规则.

  • public Teacher()
    {
    System.out.println("--------Teacher() Executed-------");
    }

    public Teacher(String name)
    {
    System.out.println("--------Teacher(String name) Executed-------");
    }
  • 创建对象时, 根据传入参数, 匹配对应的构造方法.

  • 如果自己已经定义了一个构造方法, 则系统不再提供默认的无参构造方法.

构造方法为属性赋值

Teacher t2 = new Teacher("Jerry",28,"male",5666D);

 

this关键字

  • 类是模板, 可服务于此类的所有对象;

  • this是类中的默认引用, 代表当前实例; ( 指向当前实例的地址 )

  • 当类服务于某个对象时, this则指向这个对象

  • 当局部变量与实例变量重名时, 用this关键字做区分

 

  • this第一种用法: 调用当前实例属性、当前实例方法。如:this.name、this.sayHii()

  • this第二种用法:调用本类中的其他构造方法。如:this()、this(实参);解决代码冗余

    • public Student(String name,int age,String sex)
      {
         this.name = name;
         this.age = age;
         this.sex = sex;
      }
      public Student(String name,int age,String sex,double score)
      {
      this(name,sex,score);
         this.score = score;
      }
    • 注意:在本构造方法用this()语句调用其他构造方法,this()语句必须放在本方法第一行

    • this( ):调用无参构造;this(实参):调用实参构造

    • 级联调用并不会创造新实例,只有在 new 实例的时候才会创建

 

总结

  • 什么是对象:

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

  • 什么是类:

    • 定义了对象应具有的特征和行为,类是对象的模版

  • 什么是方法重载:

    • 方法名相同、参数列表不同

  • 什么是构造方法:

    • 类中用于创建对象的特殊方法,名称与类名相同,没有返回值,不可通过句点调用

  • 什么是this关键字:

    • 代表当前实例,通过 this. 访问实例成员;通过this()/this(xxx)访问本类中的其他构造方法。

posted @ 2020-05-16 00:58  云川望雨  阅读(131)  评论(0编辑  收藏  举报