07_面向对象的基础

百知教育学习 - 胡鑫喆 - 07_面向对象的基础

01_面向过程

  • 思想:
    自顶向下 逐步求精

02_生活中的对象

  • 面向过程:
    从计算机执行角度出发,以代码 执行过程核心
  • 面向对象:
    的角度出发,从现实世界角度出发
  • 对象:
    • 特征: 称为 属性,一般为名词,代表对象有什么。
    • 行为: 称为 方法,一般为动词,代表对象能做什么。
  • 对象之间的关系:
    汽车 车 继承 is a
    汽车 发动机 关联 has a
    汽车 司机 依赖 use a

03_生活中的面向对象

  • 用面向对象的方法解决问题的思路
    确定 解决问题所需的 对象,再建立对象间 关系,从而确定 过程

04_对象和类

  • Java中的对象:
    • 是一块儿 数据
    • 代表生活中的一个对象
    • 生活中对象的 抽象
  • 生活中的类:
    • 概念:
      在一组相同或类似的对象中,抽取共性的特征和行为,保留所关注的部分。
  • Java中的类:
    • 是一段 代码
    • 定义了一类对象应该具有哪些 属性,方法
    • 对象的 模板

05_成员变量

  • 成员变量(实例变量)
    • 成员变量与实例变量相比是一个更加宽泛的概念,成员变量不是局部变量。
  • 成员变量与局部变量的语法差异
    • 成员变量:(与数组相同)
      • 默认值:数值型变量 0; 布尔类型 false; 对象类型 null
      • 作用范围:全类内部
      • 命名:可以和局部变量重名,局部变量优先。
    • 局部变量:
      • 默认值:无
      • 作用范围:声明开始-代码块结束
      • 命名:重合范围不允许两个局部变量重名

06_成员方法

  • 方法的声明:
    • 语法: 修饰符 返回值类型 方法名 (形参列表) 抛出的异常
    • 内涵: 代表了对象能做什么
    • 注意: 尽管方法声明时形参列表可能会使用类中的属性,但是 方法与属性声明 和它们的 顺序无关
  • 方法的实现:
    • 语法: { 代码块 }
    • 内涵: 代表了对象怎么做

07_方法重载的语法

  • 语法: 定义多个方法,方法名相同,参数表不同
  • 参数表不同的几个方面:
    • 参数个数不同
    • 参数类型不同
    • 参数类型排列不同
  • 方法的选择:
    • 编译器(而不是虚拟机)在编译时会根据 实参的类型,选择相应的方法去调用。
    • 如果没有找到匹配的方法,编译器就会 向上就近匹配(先byte,short,后int…),但是不允许出现 引用不明确 的情况。
    • 例如:
      //向上就近匹配
      byte a = 10;
      m(a);
      public void m(short a){}  // 会匹配此函数
      public void m(int a){}  
      //引用不明确,此时编译器不知道该提升哪一个变量,如果只有下面两个函数中的一个则不会报错
      m(1,2);
      public void m(int a, double b){}
      public void m(double b, int a){}

08_重载的作用

  • 允许类中的同一类方法同名,屏蔽参数的差异 (这样可以只关注方法本身,而不用在意实现的细节):因为参数不同,同一行为的行为方式会不同。
  • 例如:
    public class Person{
    	public void eat(食物 a){
    		//食物放入口中
    		//咀嚼
    		//咽下
    	}
    	public void eat(药物 b){
    		//药物放入口中
    		//喝水
    		//咽下
    	}
    	public void eat(口香糖 c){
    		//口香糖放入口中
    		//咀嚼
    		//吐出
    	}
    }

09_构造方法

  • 构造方法
    1. 不能定义返回值类型
    2. 方法名必须和类名相同,包括大小写
    3. 不能手工调用,只能再对象创建过程中自动调用一次
  • 对象的创建过程
    1. 分配空间,属性被赋予默认值
    2. 初始化属性,性被赋予初始值
    3. 调用构造方法 ,属性可以被赋予构造参数
  • 注意:
    如果一个类中,没有定义任何构造方法,系统会提供默认的无参的公开构造方法

10_对象的创建和访问

  • 创建对象的语法:
    类名 变量名 = new 类名(构造参数表)
  • 访问对象的语法:
    变量名.属性
    变量名.方法(实参列表)

11_面向过程和面向对象

  • 代码

    package day8;
    public class TestOO{
     public static void main(String[] args){
      study ("Liucy", "CoreJava");
      Student s = new Student("Liucy");
      s.study("CoreJava");
     } 
     public static void study(String name, String course){
      System.out.println("Student "+name+" study "+course);
     }
    }
    class Student{
     String name;
     public Student(String n){
      name = n;
     }
     public void study(String course){
      System.out.println("Student "+name+" study "+course);
     }
    }
  • 运行结果
    在这里插入图片描述

12_引用

  • 概念:

    对象类型的变量(出去8种基本类型的变量,都属于 引用

  • 值:

    对象的 地址

  • 调用方法时传递的参数:
    • 基本类型的变量传
    • 对象类型的变量传 地址(实参和形参指向同一对象
  • 代码
    package day9;
    public class TestReference{
     public static void main(String[] args){
      int a = 10;
      int b = a;
      b++;
      System.out.println(a);  //10
      Student s1 = new Student();
      Student s2 = s1;
      s2.age++;
      System.out.println(s1.age);  //19
      changeInt(a);
      System.out.println(a);  //10
      Student s = new Student();
      changeAge(s);
      System.out.println(s.age);  //19
     }
     public static void changeInt(int a){
      a++;
     }
     public static void changeAge(Student s){
      s.age++;
     }
    }
    class Student{
     String name = "Liucy";
     int age = 18;
    }
  • 结果

    在这里插入图片描述

13_this

  • this
    • 本质: 引用
    • 用法: “this.”, 在类中使用,指向当前对象,访问类中的属性和方法,如果不加引用,默认this引用。
    • 作用: 用于 区分成员变量局部变量
  • this()
    • 用法: 用在构造方法中,表示 调用本类其他的构造方法,必须是构造方法中的 第一条语句
  • 代码
    package day9;
    public class TestThis{
     public static void main(String[] args){
      MyClass mc = new MyClass("yuan");
      System.out.println(mc.a);
      mc.m1();
     }
    }
    class MyClass{
     int a = 10;
     int b = 20;
     public MyClass(){
      //10000
     }
     public MyClass(int i){
      this();
      System.out.println("OK");
     }
     public MyClass(String s){
      this(10);
      
     }
     public void m1(){
      int a = 30;
      System.out.println(a);  //30
      System.out.println(this.a);
     }
     public void m2(){
      System.out.println(a);  //System.out.println(this.a);
      System.out.println(b);  //System.out.println(this.b);
      m1();  //this.m1();
      
     }
    }
  • 结果

    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值