Java面向对象

一、类和对象概述

1.1 面向对象思想

面向过程👇
面向对象👇
类👇
对象

1.2 类中的内容

  • 类名

    • 类的名称

  • 属性

    • 对象具备的特征

    • 品种、姓名、年龄、地址...

  • 方法

    • 对象具备的行为

    • 吃饭、睡觉、学习、工作...

  • 构造器

    • 对象创建过程中完成属性的初始化

二、创建类

2.1 过程

1、确定类名【名词提炼法】
    狗子--Dog
    猫咪--Cat
    学生--Student
2、创建一个新的Java文件
    文件名和类名保持一致
3、定义属性
    声明变量【一般不用赋值】
    int age;
    String name;
4、定义方法
    目前先不用使用static
    public void eat(String food){}

2.2 入门案例

Dog
package com.shine.obj;
​
/**
 *  类名
 *      Dog
 *  属性--特种
 *      品种
 *      名字
 *      年龄
 *      性别
 *  方法--行为
 *      吃饭
 *      睡觉
 *      玩耍
 */
public class Dog {
    // 属性--声明变量【一般不赋值,像方法中声明的形参一样】
    String breed;
    String name;
    int age;
    String sex;
    
    // 方法--不用全部添加static
    public void eat(String food) {
        System.out.println("狗子喜欢吃" + food);
    }
    
    public void sleep() {
        System.out.println("狗子的作息时间和主人相同");
    }
    
    public void play() {
        System.out.println("狗子能陪伴主人玩耍");
    }
}
Cat
package com.shine.obj;
​
/**
 *  类名
 *      Cat
 *  属性
 *      品种
 *      名字
 *      毛色
 *      性别
 *      产地
 *
 *  方法
 *      吃饭
 *      抓老鼠
 */
public class Cat {
    // 属性--特征
    String breed;
    String name;
    int age;
    String color;
    String address;
    
    // 方法--行为
    public void eat(String food) {
        System.out.println("猫咪喜欢吃" + food);
    }
    
    public void catchMouse() {
        System.out.println("猫咪喜欢抓老鼠吃");
    }
}

三、对象

3.1 概述

  • 类是抽象的

  • 类中总结了对象应该具有的属性和行为

  • 这些属性和行为没有具体的数据

    • 属性只有声明,没有赋值【虽然有默认值】

    • 方法没有被调用,方法的形参也没有赋值

  • 如果需要使用属性和方法,需要创建此类的对象

  • 没有对象--》new一个

3.2 创建对象

Car car = new Car();
Random r = new Random();
Scanner sc = new Scanner(System.in);
package com.shine.obj;
​
public class TestDog {
    public static void main(String[] args) {
        /**
         *  创建对象的过程
         *      1、创建类
         *          1.1 类名
         *          1.2 属性
         *          1.3 方法
         *      2、创建对象
         *          2.1 new 对象
         *          2.2 访问属性【读===写】 对象.属性
         *          2.3 调用方法            对象.方法(参数)
         */
        
        // 创建对象
        Dog dog = new Dog();
​
        // 访问属性【读--写】
        
        // 读取属性:对象.属性
        System.out.println(dog.breed);  // 目前没有给属性赋值,有默认值【参考数组】,意义不大
        System.out.println(dog.name);
        System.out.println(dog.age);
        System.out.println(dog.sex);
        
        // 修改属性:对象.属性 = 数据
        dog.breed = "黑贝";
        dog.name = "道哥";
        dog.age = 3;
        dog.sex = "雄性";
        
        // 再次读取属性
        System.out.println(dog.breed);  // 目前已经给属性赋值
        System.out.println(dog.name);
        System.out.println(dog.age);
        System.out.println(dog.sex);
        
        // 调用方法:dog.方法名(参数)
        dog.eat("骨头");
        dog.sleep();
        dog.play();
    }
}

3.3 访问属性和方法

访问属性
读取数据
对象.属性
String name = 对象.name;
​
修改数据
对象.属性 = 数据;
对象.name = "道哥";
访问方法
对象.方法名(参数);
对象.eat("骨头");

3.4 创建类和对象

创建类Student
package com.shine.obj;
​
/**
 *  类名
 *      Student
 *  
 *  属性
 *      学号
 *      姓名
 *      年龄
 *      性别
 *      专业
 *      学校
 *  
 *  方法
 *      学习
 *      吃饭
 *      玩游戏
 */
public class Student {
    // 属性
    String stuId;
    String name;
    int age;
    String gender;
    String subject;
    String school;
    
    // 方法
    public void study(String skill) {
        System.out.println(name + "正在学习" + skill);
    }
    
    public void eat(String food) {
        System.out.println(name + "喜欢吃" + food);
    }
    
    public void playGame(String game) {
        System.out.println(name + "喜欢玩" + game);
    }
}
创建对象并使用
package com.shine.obj;

public class TestStudent {
    public static void main(String[] args) {
        /**
         *  1、创建类
         *      1.1 类名
         *      1.2 属性
         *      1.3 方法
         *      
         *  2、创建测试类
         *      TestStudent
         *      
         *  3、创建对象并使用
         *      3.1 new对象
         *      3.2 属性赋值
         *      3.3 调用属性和方法
         */
        
        // 创建对象
        Student stu = new Student();
        
        // 属性赋值
        stu.stuId = "10010";
        stu.name = "林冲";
        stu.age = 22;
        stu.gender = "男性";
        stu.subject = "武术";
        stu.school = "东京文武学院";
        
        // 访问属性
        System.out.println(stu.stuId);
        System.out.println(stu.name);
        System.out.println(stu.age);
        System.out.println(stu.gender);
        System.out.println(stu.subject);
        System.out.println(stu.school);
        
        // 调用方法
        stu.study("降龙十八掌");
        stu.eat("二斤熟牛肉");
        stu.playGame("高衙内");
        
    }
}

3.5 实例变量

  • 属性 == 实例变量 == 实例属性 == 成员变量

  • 实例变量是定义在类中方法外的变量,是对象的组成部分之一

  • 实例变量有默认值,无序赋值即可使用【默认值和数组相同,没有意义】

  • 如果创建了多个对象,每个对象都拥有自己的实例变量,互相隔离

选项局部变量实例变量
定义位置方法中类中方法外
默认值有,同数组元素默认值
作用范围从定义位置开始到方法结束整个类中都能使用
存储位置
生命周期同方法同对象
  • 如果局部变量和实例变量重名,优先使用局部变量【就近原则】

3.6 实例方法

  • 定义在类中方法外的方法 && 没有static修饰的方法

四、构造器

4.1 概述

  • 构造器也称为构造方法

  • 是类中一个特殊的方法

    • 方法名和类名完全相同

    • 没有返回值,也没有返回值类型

    • 在创建对象的过程中自动调用,不能通过.的方式调用

4.2 无参构造器

  • 如果没有在类中手动书写任何构造方法,JVM赠送一个无参数的构造方法

  • 如果已显示定义了构造方法,JVM不再赠送

4.3 有参数的构造器

  • 为了给类中的属性赋值

  • 如果发生实例变量和局部变量重名的情况:

    • 可以使用this.属性明确表示调用实例变量

4.4 构造器案例

People类
package com.shine.constructor;

/**
 *  类名
 *      People
 *  属性
 *      种类
 *      姓名
 *      年龄
 *      性别
 *      地址
 *      备注信息
 *  方法
 *      展示
 */
public class People {
    // 属性
    String breed;
    String name;
    int age;
    String gender;
    String address;
    String info;
    
    // 创建构造器
    public People() {}
    
    /**
     *  有参数的构造器,完成对象属性的赋值
     * @param breed
     * @param name
     * @param age
     * @param gender
     * @param address
     * @param info
     */
    public People(String breed, String name, int age, String gender, String address, String info) {
        this.breed = breed;
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.address = address;
        this.info = info;
    }

    // 方法
    public void show() {
        System.out.println("People [breed=" + breed + ", name=" + name + ", age=" + age + ", gender=" + gender + ", address="
                + address + ", info=" + info + "]");
    }
}
测试
package com.shine.constructor;

public class TestPeople {
    public static void main(String[] args) {
        // 创建对象
        People p = new People();
        p.show();
        p.breed = "黄色人种";
        p.name = "金三顺";
        p.age = 22;
        p.gender = "女性";
        p.address = "汉城";
        p.info = "温柔美丽贤惠大方";
        
        p.show();
        
        People pp = new People("黄色人种", "山本一郎", 22, "男性", "我本山中人", "门口有条河");
        pp.show();
    }
}

4.5 构造器赋值过程

4.6 构造方法重载

五、this关键字

5.1 概述

  • 在构造器中可能遇到实例属变量和局部变量重名的情况

    • 默认优先使用局部变量,实例变量失效

    • 可以使用this.属性的方式来明确就是调用实例变量

5.2 this关键字的用法

调用属性【重点】
  • 为了区分局部变量和实例变量

this.属性
调用方法
this.方法(参数);
调用其他构造器
  • 能调用类中其他的构造方法

  • 必须放在构造方法第一行

  • 为了节省代码

this(参数)

案例代码【掌握】

package com.shine.this666;
​
/**
 *  类名
 *      Car
 *  属性
 *      品牌
 *      型号
 *      价格
 *      颜色
 *  方法
 *      展示
 */
public class Car {
    // 属性
    String brand;
    String model;
    double price;
    String color;
    
    public Car() {}
​
    public Car(String brand, String model) {
        super();
        this.brand = brand;
        this.model = model;
    }
​
    public Car(double price, String color) {
        super();
        this.price = price;
        this.color = color;
    }
​
    public Car(String brand, String model, double price, String color) {
        // this.属性表示调用实例变量
//      this.brand = brand;
//      this.model = model;
        // this(参数)表示调用其本类中的其它构造方法
        // 构造器的调用必须放在其他构造器的第一行
        this(brand, model);
        // this(price, color);
        this.price = price;
        this.color = color;
        
        // this.方法表示调用实例方法
        this.show();
    }
​
    // 方法
    public void show() {
        System.out.println("Car [brand=" + brand + ", model=" + model + ", price=" + price + ", color=" + color + "]");
    }
    
}
  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值