螺竹编程
发布于 2024-05-04 / 6 阅读
0

Java面向对象:类与对象

介绍

在Java中,对象是类的一个实例。类是一种抽象的数据类型,它定义了一组属性和方法,用于描述某种类型的对象。

在Java中,类是创建对象的模板。当您定义一个类时,您定义了一个通用的数据类型,并指定了该类型的属性和方法。然后,您可以根据该类创建任意数量的对象。每个对象都具有相同的属性和方法,但可能具有不同的属性值。

例如,假设您正在编写一个程序,用于表示汽车。您可以定义一个名为"Car"的类,该类具有属性,例如"make"、"model"、"year"和"color"。该类还可以定义方法,例如"start"、"stop"、"accelerate"和"brake"。然后,您可以根据该类创建多个汽车对象,每个对象都具有相同的属性和方法,但具有不同的属性值。

在Java中,类定义包括类名、属性和方法。

示例

以下是一个简单的Java类定义的示例:

public class Car {
    private String make;
    private String model;
    private int year;
    private String color;
  
    public Car(String make, String model, int year, String color) {
        this.make = make;
        this.model = model;
        this.year = year;
        this.color = color;
    }
  
    public void start() {
        // code to start the car
    }
  
    public void stop() {
        // code to stop the car
    }
  
    public void accelerate() {
        // code to accelerate the car
    }
  
    public void brake() {
        // code to apply brakes to the car
    }
}

在上面的示例中,Car类具有四个属性(make、model、year和color)和四个方法(start、stop、accelerate和brake)。构造函数public Car(String make, String model, int year, String color)用于创建Car对象时初始化属性值。这些方法可以用来操作Car对象的行为。

内部类

Java中的内部类是定义在另一个类内部的类。内部类可以访问外部类的所有成员,包括私有成员,而外部类不能访问内部类的成员。内部类可以分为成员内部类、局部内部类、匿名内部类和静态内部类。

  1. 成员内部类: 成员内部类是定义在外部类的成员位置上的类,可以访问外部类的所有成员,包括私有成员。成员内部类可以有访问修饰符,可以是public、protected、默认、private。成员内部类可以使用外部类的引用表示方式:外部类.this。

  2. 局部内部类: 局部内部类是定义在方法或代码块中的类,只能在方法或代码块内使用,不能被外部类或其他类使用。局部内部类可以访问外部类的成员,但是只能访问final类型的局部变量。

  3. 匿名内部类: 匿名内部类是没有类名的内部类,它通常用于创建实现某个接口或继承某个类的对象。匿名内部类可以直接在创建对象时定义,并且可以重写父类或接口的方法。匿名内部类不能使用访问修饰符和static关键字。

  4. 静态内部类: 静态内部类是定义在外部类中的静态类,可以有静态成员和方法,也可以访问外部类的静态成员和方法。静态内部类可以使用外部类的引用表示方式:外部类.内部类。

内部类的主要作用是可以访问外部类的私有成员,以及将逻辑相关的类组织在一起,提高代码的可读性和维护性。

抽象类

抽象类介绍

在Java中,抽象类是一种不能被实例化的类,它只能被继承。它的目的是为了在类层次结构中作为基类,为子类提供一些通用的属性和方法。抽象类可以包含抽象方法和非抽象方法。

抽象方法是一种没有具体实现的方法,它只有方法声明,没有方法体。子类必须提供具体的实现来覆盖抽象方法。非抽象方法是有具体实现的方法。一个抽象类可以同时包含抽象方法和非抽象方法。

在Java中,定义一个抽象类需要使用abstract关键字来修饰类。以下是一个抽象类的示例:

public abstract class Shape {
    private String color;
  
    public Shape(String color) {
        this.color = color;
    }
  
    public String getColor() {
        return color;
    }
  
    // 抽象方法
    public abstract double getArea();
}

在上面的示例中,Shape是一个抽象类,它具有一个私有属性color和一个构造函数。它还包含一个抽象方法getArea(),该方法没有方法体。由于该类包含抽象方法,因此它必须声明为抽象类。

子类可以继承抽象类,并提供具体的实现来覆盖抽象方法。

抽象类示例

以下是一个继承Shape抽象类的子类的示例:

public class Circle extends Shape {
    private double radius;
  
    public Circle(String color, double radius) {
        super(color);
        this.radius = radius;
    }
  
    @Override
    public double getArea() {
        return Math.PI * radius * radius;
    }
}

在上面的示例中,Circle继承自Shape抽象类,并提供了具体的实现来覆盖getArea()抽象方法。注意,子类必须实现所有的抽象方法,否则它也必须被声明为抽象类。