02.对象和类

java 是面向对象的编程语言

  • 对象:对象是类的一个实例,有状态和行为。
  • :类是一个模板,它描述一类对象的行为和状态。

初学时,在理解“对象”和“类”的关系时,如上面这种对“类”的定义,描述比较抽象,让人难以理解。

在翻阅一些教程后,我们可以用更通俗的理解,把“类”当做“分类”。比如在动物界,我们一般会分类“猫”、“狗”、“鱼”,这些都是我们定义出来的分类,我们定义的依据就是归为同一类动物都有类似的行为和属性。比如

  • 猫:都会喵喵叫、都会抓老鼠、都喜欢吃鱼、喜欢...
  • 狗:听力敏锐、天气热会吐舌头、会汪汪汪、忠诚、能看家,喜欢吃翔...
  • 鱼:会游泳、生活在水里、能在水下呼吸...

学习理论的过程也需要实践,现在我们来尝试定义“狗”

class Dog{
    // Dog 类:狗
}

狗有一些公共的行为(方法),比如吃翔 ̄へ ̄

/**
 * Dog 类:狗
 */
class Dog{
    // 行为(方法):狗狗吃翔
    void eat(){
        System.out.println("某只狗喜欢吃翔...");
    }
    // 行为(方法):狗狗吠叫
    void say(){
        System.out.println("汪汪汪....(有一只狗在叫)");
    }
}

还有一些不同的属性(状态),比如狗狗的名称、年龄、皮毛颜色

/**
 * Dog 类:狗
 */
class Dog{
    // 狗狗的名称
    String name;
    // 狗狗的年龄
    int age;
    // 狗狗的皮毛颜色
    String color;
    // 行为(方法):狗狗吃翔
    void eat(){
        System.out.println(this.name + "喜欢吃翔...");
    }
    // 行为(方法):狗狗吠叫
    void say(){
        System.out.println("汪汪汪....(" + this.name + "在叫)");
    }
}

我们定义了一个“狗”的分类,我们知道它们都喜欢吃翔,会被主人取不同的名字、年龄大小不同、有不同的皮毛颜色,所以给狗定义的这些行为(方法)和属性(状态),但是现在,它是看不到、摸不着的,只有,是没有实体的。

假如现在你想要养一只宠物,你的朋友给推荐你养狗,并给你介绍了“狗”是一种什么动物,这样,你就知道了“狗”这个分类。but,别人给你描述了“狗”这个分类,你就真的拥有狗了嘛?

NO!现在的你,只是知道了狗的特征,get了新的知识,那接下来,你需要什么?

你需要的是一只:活的、会汪汪叫,名字叫“旺财”,吃了翔还会舔你脸的狗。这只狗是什么?

它就是分类“狗”的一个“真实个体”,就是“类”的一个“实例对象”

那么,接下来我们就要实例化一只狗出来给你做宠物(实例化对象)

/**
 * 商店
 */
public class Store {
    // Store类 入口
    public static void main(String[] args) {
        // 假设,你进入了这个商店。发现:
        // 商店里有一只名叫tom的狗狗,这只狗狗就是Dog类的实例化对象
        Dog tom = new Dog("tom", 1, "土黄色"); // new 一个类,可以创造改类的实例化对象
        System.out.println("商店有一只" + tom.getInfo());
        tom.say();
        tom.eat();

    }
}

/**
 * Dog 类:狗
 */
class Dog{
    // 狗狗的名称
    String name;
    // 狗狗的年龄
    int age;
    // 狗狗的皮毛颜色
    String color;
    // 自定义函数:行为(方法)狗狗吃翔
    void eat(){
        System.out.println(this.name + "喜欢吃翔...");
    }
    // 自定义函数:行为(方法)狗狗吠叫
    void say(){
        System.out.println("汪汪汪....(" + this.name + "在叫)");
    }
    // 自定义函数:获取狗狗信息
    String getInfo(){
        String info;
        info = "名叫" + this.name + "," + this.age + "岁," + this.color + "的狗狗。" ;
        return info;
    }
    // 构造函数:用来new实例化对象
    public Dog(String name, int age, String color){
        this.name = name;
        this.age = age;
        this.color = color;
    }
}

现在,我们将文件另存为 Store.java,编译执行

实例化一只狗狗.png

瞧 ~ 现在,你就见到了一只真正的狗狗(类的实例化对象)。

我们假设一下,你一眼就相中了这只狗狗,你想把它买回家做你的宠物。但是别急,也许你想要了解它的更多信息,比如它的品种、性别、价格等等,这时,我们就可以来对Dog类做一些补充。

/**
 * 商店
 */
public class Store {
    // Store类 入口
    public static void main(String[] args) {
        // 假设,你进入了这个商店。发现:
        // 商店里有一只名叫tom的狗狗,这只狗狗就是Dog类的实例化对象
        Dog tom = new Dog("tom", 1, "土黄色","哈士奇","母狗",1888.88); // new 一个类,可以创造改类的实例化对象
        System.out.println("商店有一只狗狗:【" + tom.name +"】");
        tom.getInfo();
        tom.say();
        tom.getOwner();
        // 假设你的名字是jim
        tom.setOwner("jim");

    }
}

/**
 * Dog 类:狗
 */
class Dog{
    // 狗狗的名称
    String name;
    // 狗狗的年龄
    int age;
    // 狗狗的皮毛颜色
    String color;
    // 狗狗的品种
    String breed;
    // 狗狗的性别
    String sex;
    // 狗狗的价格
    Double price;
    // 狗狗的主人
    String owner;
    // 自定义函数:行为(方法)狗狗吃翔
    void eat(){
        System.out.println(this.name + "喜欢吃翔...");
    }
    // 自定义函数:行为(方法)狗狗吠叫
    void say(){
        System.out.println("汪汪汪....(" + this.name + "在叫)");
    }
    // 自定义函数:获取狗狗信息
    void getInfo(){
        System.out.println("====== 【"+ this.name +"】信息 start ======");
        System.out.println("狗名:"+this.name);
        System.out.println("品种:"+this.breed);
        System.out.println("性别:"+this.sex);
        System.out.println("年龄:"+this.age + "岁");
        System.out.println("毛色:"+this.color);
        System.out.println("价格:"+this.price);
        System.out.println("====== 【"+ this.name +"】信息 end ======");
    }
    // 改变狗狗的主人
    void setOwner(String owner){
        this.owner = owner;
        System.out.println("狗狗的新主人【" + this.name + "】是" + this.owner);
    }
    // 获取狗狗的主人信息
    void getOwner(){
        String info;
        if(this.owner != null && !this.owner.equals("")){
            info = "狗狗【" + this.name + "】的主人是" + this.owner;
        }else{
            info = "狗狗【" + this.name + "】现在还没有主人";
        }
        System.out.println(info);
    }
    // 构造函数:用来new实例化对象
    public Dog(String name, int age, String color,String breed,String sex,Double price){
        this.name = name;
        this.age = age;
        this.color = color;
        this.breed = breed;
        this.sex = sex;
        this.price = price;
    }
}

重新编译后执行


设置狗狗的主人.png

恭喜!现在你拥有了一只宠物狗狗,她的名字叫tom

不过,家(yi)财(pin)万(ru)贯(xi)的你,只养一只宠物怎么对得起你的身价?so ~ 你决定多养几只(实例化多个对象

/**
 * 商店
 */
public class Store {
    // Store类 入口
    public static void main(String[] args) {
        // 假设你的名字是jim
        String you = "jim";
        // 你进入了这个商店,发现:
        // 商店里有一只名叫tom的狗狗,这只狗狗就是Dog类的实例化对象
        Dog tom = new Dog("tom", 1, "土黄色","哈士奇","母狗",1888.88); // new 一个类,可以创造改类的实例化对象
        System.out.println("商店有一只狗狗:【" + tom.name +"】");
        tom.getInfo();
        tom.say();
        tom.getOwner();
        tom.setOwner(you);

        //还有第二只狗狗
        Dog ali = new Dog("ali", 2, "纯白色", "贵宾犬", "公狗", 8888.00);
        System.out.println("商店还有一只狗狗:【" + ali.name +"】");
        ali.getInfo();
        ali.eat();
        ali.getOwner();
        ali.setOwner(you);

    }
}
领养多只狗狗.png

你可能感兴趣的:(02.对象和类)