自学内容网 自学内容网

用实例来理解Java中的类和对象


提示:以下是本篇文章正文内容,下面案例可供参考

一、类的定义与使用

类 (Class)
定义:类是一种用户自定义的数据类型,它封装了数据以及可以对这些数据进行操作的方法。类就像是一个模板或者蓝图,用来创建具体的实例。
组成部分:
字段(Fields):也称为属性或成员变量,它们表示类的状态。
方法(Methods):是类的行为,描述了这个类能够执行的操作。
构造器(Constructors):用于初始化新创建的对象。
块(Blocks):包括静态块和非静态块,可以用来执行一些初始化代码。
内部类(Inner Classes):在一个类内定义的类。
修饰符:可以使用不同的访问控制修饰符来限制类、字段或方法的可见性,比如 public, private, protected 等。
例如:我们定义一个狗类:

//类的定义一般使用大驼峰
public class Dog {
    // 成员变量
    private String name;
    private int age;

    // 构造器
    public Dog() {//这是无参构造器
        this.name = "小白";//this指向的是对象
        this.age = 2;
    }

    public Dog(String name, int age) {//这是有参构造器
        this.name = name;
        this.age = age;
    }

    // 方法
    public void bark() {
        System.out.println(this.name+"会汪汪叫!");
    }
        public void setName() {//set总有匹配的get方法,由于存放私有成员和获取
        this.name=name;
    }

    public String getName() {
        return name;
    }
     public void setAge() {
        this.age=age;
    }

    public int getAge() {
        return age;
    }

}

成员变量与方法的声明:
name 和 age 是私有成员变量,用于存狗的姓名和年龄。
setName, setAge 方法用来设置狗的姓名和年龄。
getName 和 getAge 方法是访问器方法,用于获取 name和 age 的值。
构造器的作用与重载:
默认构造器Dog() 初始化 name 和 age 。
带参数的构造器 Dog(String name, int age) 允许在创建对象时指定name 和age的初始值。

二、对象的创建与操作

对象 (Object)
定义:对象是类的一个实例。当我们基于某个类创建了一个具体的实体时,就称其为该类的对象。
创建:通过new关键字调用类的构造器来创建对象。例如,如果有一个名为Dog的类,那么可以通过Dog wangcai = new Dog();这样的语句来创建一个Dog对象。
引用:每个对象都有一个唯一的内存地址,并且我们通常使用一个引用变量来指向这个对象。
状态与行为:对象拥有自己的状态(即它的属性值)和行为(即它可以执行的方法)。不同对象可能具有相同的方法但持有不同的状态信息。
例如:我们为我们上述的狗类创建对象如下:

public class Main {
    public static void main(String[] args) {
        // 创建Dog对象
        Dog A = new Dog();//调用的无参构造器
        Dog B = new Dog("旺财"3);//调用有参构造器
 
        // 访问属性及调用方法
        System.out.println("A: (" + A.getName() + ", " + A.getAge() + ")");
        System.out.println("B: (" + B.getName() + ", " + B.getAge() + ")");

        // 修改A的姓名和年龄
        A.setName("大白");
        A.setAge(4);
        System.out.println(" A: (" + A.getName() + ", " + A.getAge() + ")");
    }
}

注意:
对象生命周期管理:垃圾回收机制
在Java中,当没有引用指向某个对象时,该对象就成为垃圾回收的目标。垃圾回收器会在后台自动清理这些不再使用的对象所占用的内存。开发者不需要手动释放内存。

三、封装、继承与多态

封装: 将数据和方法包装在一起,并通过访问控制来保护数据不被外部直接访问。这有助于隐藏实现细节并提供更好的安全性和灵活性。
继承: 允许一个类继承另一个类的属性和方法,这样就可以复用代码,并且支持层次化的分类结构。
多态: 允许子类对象当作父类对象来处理,从而使得程序更加通用和灵活。多态有两种形式:编译时多态(方法重载)和运行时多态(方法覆盖)。

1.封装是隐藏对象内部实现细节,并提供公共接口供外部访问的技术。这有助于保护数据不被随意修改,并且可以控制对数据的操作。
例如:我们对我们的银行账户进行一个人封装:

public class Account {
    private double balance; // 私有成员变量

    public double getBalance() { // 提供公共方法访问balance
        return balance;
    }

    public void deposit(double amount) { // 存款方法
        if (amount > 0) {
            balance += amount;
        }
    }

    public void withdraw(double amount) { // 取款方法
        if (amount > 0 && amount <= balance) {
            balance -= amount;
        }
    }
}

2.继承允许一个类继承另一个类的属性和方法。子类可以从父类那里继承功能,并添加新的特性或覆盖现有方法。extends是继承的关键词,子类 extends 父类。
例如:我们定义的狗类是不是属于动物,那么我们定义一个动物类,我们的狗类就可以继承动物类:

// 父类
class Animal {
    protected String name;

    public Animal(String name) {
        this.name = name;
    }

    public void eat() {
        System.out.println(name + " 会吃饭");
    }
}

// 子类
class Dog extends Animal {
    public Dog(String name) {
        super(name); // 调用父类构造器
    }

    @Override//表示对父类方法的重写
    public void eat() {
        System.out.println(name + " 爱吃土豆");
    }

    public void bark() {
        System.out.println(name + " 会汪汪叫!");
    }
}

3.多态意味着“多种形态”,它允许我们使用统一的接口来处理不同类型的对象。通过方法重写和向上转型,可以在运行时决定调用哪个具体的方法实现。

public class TestDemo {
    public static void main(String[] args) {
        Animal A = new Animal("旺财");
        Animal B = new Dog("小黑");//Dog继承Animal,这样定义说明了多态
B
        A.eat(); // 输出:  旺财会吃饭
        B.eat();   // 输出: 小黑爱吃土豆
        ((Dog)B).bark(); // 向下转型后调用特定于Dog的方法
    }
}

理解和运用好类和对象的概念对于掌握Java面向对象编程至关重要。它们不仅是构建复杂应用程序的基础,也是许多设计模式和技术架构的核心。


总结

非常感谢大家阅读完这篇博客。希望这篇文章能够为您带来一些有价值的信息和启示。在未来的日子里,我们将继续探索更多关于博客技术的精彩内容,敬请期待。如果您有任何问题或建议,欢迎在评论区留言,我们一起交流学习。
在这里插入图片描述


原文地址:https://blog.csdn.net/2401_84365662/article/details/143079434

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!