抽象类(HNU-面向对象程序设计)

抽象类

一种不能被实例化的类,目的是为了让其他类继承它,并在子类中完善它的抽象方法。我们使用 abstract 关键字来定义抽象类,同时它可以包含抽象方法和普通方法。

例子:

abstract class Shape {
    // 抽象方法,没有实现
    abstract void draw();

    // 普通方法,有具体实现
    void display() {
        System.out.println("This is a shape.");
    }
}

在这个例子中,Shape 是一个抽象类,它包含了一个抽象方法 draw 和一个普通方法 display。抽象方法没有实际的实现,而是在子类中被具体实现。

当我们要创建一个实际的形状类时,我们可以继承抽象类并实现它的抽象方法,比如:

class Circle extends Shape {
    void draw() {
        System.out.println("Drawing a circle.");
    }
}

接口:

接口定义了一组方法,但没有提供这些方法的具体实现。类通过实现(implements)接口来承诺提供这些方法的具体实现。让我们看一个简单的例子:

// 定义一个简单的接口
interface Eater {
    void eat();
}

// 实现接口的类
class Human implements Eater {
    public void eat() {
        System.out.println("Human is eating.");
    }
}

// 另一个实现接口的类
class Animal implements Eater {
    public void eat() {
        System.out.println("Animal is eating.");
    }
}

在这个例子中,Eater 是一个接口,它规定了一个方法 eat。然后,HumanAnimal 这两个类分别实现了这个接口,提供了各自的 eat 方法的具体实现。

接口中的权限:

在Java接口中,所有的成员都具有公共的访问权限。接口中的字段(成员变量)默认为 publicstaticfinal,而方法默认为 publicabstract

非 public 的数据没有用,不能被任何调用。(不写修饰符编译器也会默认为Public)

在 Java 中,与 C++ 不同,没有类似于 C++ 中的 "友元" 的概念

注意:

类只能继承一个类,但可以实现多个接口。

抽象类可以有构造器,而接口不能有。

抽象类中的抽象方法可以有具体的实现,而接口中的方法默认是抽象的,不能有实现。

final 和 static 的区别:

`final` 关键字:

1. **变量:** 当应用于变量时,`final` 表示该变量是一个常量,不可再被修改。一旦被赋值,就不能再改变。

    ```java
    final int MAX_VALUE = 100;
    ```

2. **方法:** 当应用于方法时,`final` 表示该方法不能被子类重写。

    ```java
    class Parent {
        final void display() {
            System.out.println("This is a final method.");
        }
    }

    class Child extends Parent {
        // 无法重写display方法
    }
    ```

3. **类:** 当应用于类时,`final` 表示该类不能被继承。

    ```java
    final class FinalClass {
        // 不能有子类
    }
    ```

`static` 关键字:

1. **变量:** 当应用于变量时,`static` 表示该变量属于类而不是实例。所有实例共享同一份变量。

    ```java
    class Example {
        static int count = 0;
    }
    ```

2. **方法:** 当应用于方法时,`static` 表示该方法属于类而不是实例。可以通过类名直接调用,不需要创建实例。

    ```java
    class Utility {
        static void doSomething() {
            System.out.println("This is a static method.");
        }
    ```

3. **块:** 当应用于块时,`static` 表示该块在类加载时执行,而不是在实例创建时执行。

    ```java
    class Example {
        static {
            System.out.println("This is a static block.");
        }
    }
    ```

对于静态变量(静态字段),可以通过类名直接访问并修改它们,但是静态方法不能重写。

没有静态类这个东西。 

 

你可能感兴趣的:(Java学习,开发语言,java)