【从零开始学习JAVA | 第十七篇】抽象类与抽象方法

目录

 前言:

抽象类与抽象方法:

抽象类:

抽象方法:

特点:

抽象类

抽象方法

注意事项

抽象类 与 抽象方法的意义

抽象类

抽象方法


 前言:

        在之前,如果我们要构建两个相同类型的类的时候,减少代码的重用率,我们想出了一个方法:抽象出来一个父类,父类有两个子类相同的性质,我们在创建子类的时候,就可以继承这个父类,然后再在子类中添加不同的类内成员。这种方法很好,但是还有一个问题:我们其实也可以单独创建出来这个父类person,并且我们之前在父类中创建的供子类重写的代码也可以被直接调用。这在逻辑上就有一定的问题,因此我们提出了抽象类与抽象方法的概念。

抽象类与抽象方法:

抽象类:

1. 抽象类是一种特殊的类,无法被实例化

2. 抽象类中可以定义抽象方法,抽象方法只有方法签名,没有方法体,需要使用 `abstract` 关键字来修饰。

3. 抽象类可以包含普通的具体方法或属性,但是至少必须有一个抽象方法

4. 如果一个类继承了一个抽象类,那么它必须实现这个抽象类中所有的抽象方法,否则这个类也必须被声明为抽象类。

下面是一个抽象类的例子:

abstract class Shape {
    protected int x, y;

    public void moveTo(int newX, int newY) {
        System.out.println("移动到 (" + newX + "," + newY + ")");
        x = newX;
        y = newY;
    }

    abstract public double area();
}

class Rectangle extends Shape {
    private int width, height;

    public Rectangle(int x, int y, int width, int height) {
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;
    }

    public double area() {
        return width * height;
    }
}

class Circle extends Shape {
    private int radius;

    public Circle(int x, int y, int radius) {
        this.x = x;
        this.y = y;
        this.radius = radius;
    }

    public double area() {
        return Math.PI * radius * radius;
    }
}

在上面的例子中,Shape 是一个抽象类,包含了一个普通方法 moveTo 和一个抽象方法 area。Rectangle 和 Circle 分别继承自 Shape 类,并实现了 area 方法。

抽象方法:

1. 抽象方法没有方法体,只有方法签名,需要使用 `abstract` 关键字来修饰。

2. 抽象方法必须在抽象类中定义。

3. 所有的抽象方法都必须在子类中被实现。

下面是一个抽象方法的例子:


abstract class Animal {
    abstract public void sound();
}

class Dog extends Animal {
    public void sound() {
        System.out.println("Woof");
    }
}

class Cat extends Animal {
    public void sound() {
        System.out.println("Meow");
    }
}

在上面的例子中,Animal 是一个抽象类,包含了一个抽象方法 sound。Dog 和 Cat 分别继承自 Animal 类,并实现了 sound 方法。

通过上述代码可以看出,抽象类和抽象方法的使用可以帮助实现代码的灵活性和可扩展性,通过继承抽象类,并实现抽象方法,可以使类的设计更加合理且易于扩展。

特点:

抽象类

1. 抽象类不能被实例化

由于抽象类包含抽象方法,而抽象方法没有方法体,因此无法完成一个抽象类的实例化。

2. 抽象类可以包含已实现的方法

抽象类中有可能存在已实现的方法,在子类继承时可以直接使用这个方法。

3. 抽象类中必须至少包含一个抽象方法

抽象类中至少需要存在一个抽象方法,抽象方法某种程度上反映出了这个类完整功能的一部分。

4. 抽象类的子类必须实现所有抽象方法

如果一个类继承了一个含有抽象方法的抽象类,它必须实现所有抽象方法,否则这个类也必须被声明为抽象类。

抽象方法

1. 抽象方法没有方法体

抽象方法只有方法签名,没有具体的实现。

2. 抽象方法必须在抽象类中定义

因为抽象方法只有方法签名,没有方法体,所以抽象方法必须在抽象类中定义,而普通的类无法定义抽象方法。

3. 所有的抽象方法都必须在子类中被实现

如果一个子类继承了一个抽象类,并且这个抽象类中存在抽象方法,那么子类必须实现所有抽象方法。

4. 抽象方法必须符合方法重写的规则

当子类继承了一个抽象类,并且实现了这个抽象类的抽象方法时,实现的方法必须与抽象方法具有相同的签名,权限修饰符和返回类型。

注意事项

1. 一个类可以同时继承一个抽象类并实现多个接口

2. 抽象类和接口都可以规定子类必须实现某种行为

3. 抽象类适用于多个子类需要实现相同的行为的情况,接口适用于多个类需要实现相同的方法的情况

4. 对于一个应用程序,应该尽量避免使用过多的抽象类。在OOP中,不应该过度使用继承,因为它会导致类之间的耦合,从而使代码难以维护。为了解决这个问题,可以使用接口替代抽象类,接口可以实现灵活的组合方式,以及避免使用继承时存在的种种问题。

抽象类 与 抽象方法的意义

抽象类

1. 抽象类是一种约束和规范类的定义方式,它更加严谨和规范。

2. 抽象类通过抽象方法定义了一些行为或功能,强制子类对这些方法进行具体实现并覆盖实现细节。

3. 抽象类可以更加灵活地组织代码,从而在实现某些具体的操作时更加便捷。

4. 抽象类可以作为其他类的基类,可以减少代码量,降低耦合度。

抽象方法

1. 抽象方法是一种约束和规范方法的定义方式,它强制实现类实现方法的具体实现。

2. 抽象方法是一种规范和规则,强制子类实现必要的方法,从而保证程序的一致性和正确性。

3. 抽象方法可以让设计者将精力集中在类的接口上,而不用过早地考虑到具体实现的细节处理。

4. 抽象方法的使用可以降低耦合度,提高类的级别,从而方便代码的修改和维护。

总之,抽象类和抽象方法作为面向对象编程中的重要概念,可以帮助程序员更加准确地定义类和方法的特征,从而使代码更加规范、简洁和易维护。它们可以规范代码并减少出错几率,是一种对程序员的约束和规范,有助于提高程序的可读性和可维护性。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

猜你喜欢

转载自blog.csdn.net/fckbb/article/details/131354284
今日推荐