用实例来理解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)!