转行学Java的第7天:了解面向对象

我是张骚年,量子玄学信徒,祖安冲浪王者,B站白嫖大师,撕少保护协会资深会员,一个没有感情的表情包机器。java

应届二本物理找不到工做,准备用五个月转行Java”上流社会“程序员

脱发日记

学习面向对象的第一天,在网上看到一个段子:程序员是不缺对象的,没有什么对象是一个new解决不了的,若是有,就多new几个。
我挠了挠头,程序员路子都这么野的吗?
编程

今日学习目标

了解什么面向对象 markdown

今日学习难点

理解面向对象

学习笔记 重点总结

什么是面向对象

计算机中的对象 : 复杂的客观事物在java程序中的表现形式。
在计算机眼中,一切都是对象。
举个例子:函数

描述一个对象:以水杯为例oop

  • 名称、材料、颜色、大小  ------外在特征
  • 除了有特征,还具备保温功能能干什么  -------所具备的功能
  • 在描述的时候 除了描述特征、还须要描述功能

描述一我的 应该怎么描述学习

  • 身高、体重、年龄、衣服颜色
    • 对应的是数据,表明对象有什么特征、外在特色
    • 程序中以变量体现,称为对象的属性
  • 吃饭、睡觉、喝水、唱歌
    • 对应的是行为和功能,表明对象能作什么
    • 程序中以函数体现,函数之后统称为方法,称为对象的方法


经过面向对象能够在Java中模拟客观是的事物:测试

  • 经过属性模拟 事物的数据
  • 经过方法模拟 事物的行为和功能


总结this

  1. 计算机的需求来源于客观世界
  2. 现实世界的对象:客观存在的事物
  3. 计算机中的对象:JVM的一个连续的存储空间,表明现实世界中一个对应的对象

面向对象语法细节—类

类:保存了一类对象的信息,定义了对象的属性和方法【对象的模板】
类的组成:spa

  • 属性(实例变量)类的内部 方法的外部
    • 实例变量都有默认值
    • 做用范围:至少在整个类的内部
    • 实例变量做用范围内实例变量不能有命名冲突,能够和局部变量冲突,局部变量优先
  • 实例方法 表明对象可以作什么
    • 方法的声明 可以作神门
    • 方法的实现 方法体 怎么作
    • 声明组成:修饰符,返回值类型,方法名(形参列表) 可抛出的异常
    • 实例方法的执行必须依赖一个对象,执行过程当中从执行方法的对象中获取实例变量

public class Day07 {
public static void main(String[] args) {
复制代码

// 建立对象经过new Dog dog = new Dog();

// 给狗的属性赋值 dog.name = "hhh"; dog.age = 18;

// 调用狗的方法 dog.eat(); } }

class Dog{ // 定义属性 狗的名字 String name; // 狗的年龄 int age;

复制代码public static void main(String[] args) { 复制代码// 定义方法 public void eat(){ System.out.println("狗能够吃"); } }

面向对象的开发方式:

  1. 定义类
  2. 建立对象
  3. 使用对象的实例变量和实例方法完成需求

方法重载

在一个类中,同一种功能可能会有多种表现形式。
例如:人的吃功能,对于不一样的东西有不一样的吃方式,吃药、吃饭、吃口香糖
所以在一个类中,写吃方法的时候,也会存在实现方式的差别。也就是方法名字相同 可是实现不一样
这样的作法称之为方法的重载

方法的重载:在一个类中定义多个方法名相同,参数列表不一样的方法
参数列表不一样的状况有:

  1. 形参类型不一样
  2. 形参数量不一样
  3. 形参顺序不一样

注意:形参名不一样,不算形参列表不一样,不构成重载

使用的时候根据外界传入的实参来匹配对应的方法
编译器根据调用者传递的实际参数,肯定调用哪个方法
编译器根据参数匹配方法时,先进行精确匹配,若是匹配不成功,则就近向上匹配,可是注意避免混淆的现象

public class Day07 {

    public static void main(String[] args) {
//        建立对象经过new
        Dog dog = new Dog();

//        给狗的属性赋值
        dog.name = "hhh";
        dog.age = 18;


//        调用狗的方法
        dog.eat();
//        调用重载的方法
        dog.eat("骨头");
    }
}


class Dog{
//    定义属性 狗的名字
    String name;
//    狗的年龄
    int age;

//    定义方法
    public void eat(){
        System.out.println("狗能够吃");
    }
//    重载的方法
    public void eat(String food){
        System.out.println("狗能够吃"+food);
    }
}
复制代码

构造方法

构造方法:类的内部除了有属性、方法  还有一个构造方法,构造方法 仍是方法,只是比较特殊
构造方法的特色:

  1. 类之内 其余方法之外
  2. 构造方法的方法名必须和类名彻底一致
  3. 构造方法没有返回值类型(连void都没有)
  4. 构造方法是在建立对象时,只能和new连用,不能手动调用,JVM会自动调用一次
  5. 构造方法容许重载
  6. 建立对象时候 构造方法一般能够为属性赋值
  7. 若是一个类中没有定义任何的构造方法,则JVM会自动添加一个默认公开、无参构造方法;可是若是类中定义了其余有参构造方法,则JVM再也不提供默认公开无参数的构造方法
public class Day07 {

    public static void main(String[] args) {
//        建立对象经过new  使用构造方法建立对象
        Dog dog = new Dog();

//        使用有参构造方法建立对象
        Dog kkk = new Dog("kkk"23);
//        给狗的属性赋值
        dog.name = "hhh";
        dog.age = 18;


//        调用狗的方法
        dog.eat();
//        调用重载的方法
        dog.eat("骨头");
    }
}


class Dog{
//    定义属性 狗的名字
    String name;
//    狗的年龄
    int age;

//    定义方法
    public void eat(){
        System.out.println("狗能够吃");
    }
//    重载的方法
    public void eat(String food){
        System.out.println("狗能够吃"+food);
    }
//    无参构造方法
    public Dog() {
    }
//    两个参数的构造方法
    public Dog(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
复制代码

对象的建立过程

一个对象的建立 不是一蹴而就的。有步骤的,第一步干啥,第二步干啥 第三步干啥

对象建立的触发点:使用new关键字建立对象

  1. 分配空间
  2. 为属性赋默认值
  3. 属性都有默认数据,本身没法选择
  4. 初始化属性
  5. 为属性第二次赋值
  6. 不为属性赋初始值,第二步就没有了写了才有
  7. 调用构造方法
  8. 为属性第三次赋值
  9. 一样还能够经过对象名.属性名 来为属性赋值

今日学习名词

名词 含义
overload 重载
class

今日学习总结

image.png
image.png

每日习题

编程:设计一个 Worker 类 和 Address 类,类的要求以下:

  1. 定义一个 Worker 类,类中定义三个属性:姓名、年龄、工资(salary),要求以下:
  2. 提供公开无参构造方法和三个参数的构造方法
  3. 定义无参的 work 方法和带整数参数 work(int hours)方法,参数表明工人工做的小时数
  4. 定义一个 Address 类,类中定义属性:地址(addr)、邮编(zipCode),为此类提供无参数和有 参数的构造方法。
  5. 为 Worker 类添加一个 Address 类型的属性 address
  6. 定义一个测试类,建立一个 Worker 对象,其姓名为张3、年龄为 2六、工资为 10000.0;家庭地址为:北京市海淀区清华园 1 号院、邮编为 100010
public class Test17 {
    public static void main(String args[]) {
        Worker w = new Worker("zhangsan"2610000.0);
        Address addres = new Address("北京市海淀区清华园1号院""100010"); w.address = addres;
    } 
}
//工人类
class Worker {
    String name;//姓名
    int age;//年龄
    double salary;//工资
    Address address;//地址(属性的类型是Address类型)
    
    public Worker() {
        
    }
    public Worker(String name, int age, double salary) this.name = name;
        this.age = age;
        this.salary = salary;
    }
    public void work() { System.out.println("work");
    }
    public void work(int hours) {
        System.out.println("worker works for " + hours + " hours");
    } 
}
//地址类
class Address {
    String address;
    String zipCode;
    public Address() {
    }
    public Address(String address, String zipCode) 
        this.address = address;
        this.zipCode = zipCode;
    } 
}
复制代码
相关文章
相关标签/搜索