Java教程

Java abstract关键字

abstract关键字用于实现Java中的抽象。这是一个不可访问的修饰符,用于创建抽象类和方法。
抽象类的作用是包含抽象方法。但是,它也可能包含非抽象方法。用abstract关键字声明且没有任何实现的方法称为抽象方法。

语法: -

abstract class Employee
{
abstract void work();
}

注意: 注意-我们不能在非抽象类中声明抽象方法。

抽象关键字规则

不要做

abstract关键字不能与变量和构造函数一起使用。 如果类是抽象的,则无法实例化。 如果方法是抽象的,则它不包含主体。 我们不能在 final 中使用abstract关键字。 我们不能将抽象方法声明为private 我们不能将抽象方法声明为static 抽象方法无法同步。

要做

abstract关键字只能与类和方法一起使用。 抽象类可以包含构造函数和静态方法。 如果一个类扩展了抽象类,则它还必须实现至少一个抽象方法。 抽象类可以包含main方法和final方法。 抽象类可以包含重载的抽象方法。 我们可以将本地内部类声明为抽象的。 我们可以使用throw子句声明抽象方法。

abstract关键字的示例

示例1: 包含抽象方法的抽象类

abstract class Vehicle {
    abstract void bike();
}
class Honda extends Vehicle {
    @Override
    void bike() {
        System.out.println("Bike is running");
    }
}
public class abstractExample1 {
    public static void main(String[] args) {
        Honda obj = new Honda();
        obj.bike();
    }
}
输出:
Bike is running

示例2: 包含抽象和非抽象方法的抽象类

abstract class Vehicle {
    abstract void bike();
    void car() {
        System.out.println("Car is running");
    }
}
class Honda extends Vehicle {
    @Override
    void bike() {
        System.out.println("Bike is running");
    }
}
public class abstractExample2 {
    public static void main(String[] args) {
        Honda obj = new Honda();
        obj.bike();
        obj.car();
    }
}
输出:
Bike is running
Car is running

示例3: 包含构造函数的抽象类

abstract class Vehicle {
    String msg;
    Vehicle(String msg) {
        this.msg = msg;
    }
    void display() {
        System.out.println(msg);
    }
}
class Honda extends Vehicle {
    Honda(String msg) {
        super(msg);
    }
}
public class abstractExample3 {
    public static void main(String[] args) {
        Honda obj = new Honda("Constructor is invoked");
        obj.display();
    }
}
输出:
Constructor is invoked

示例4: 包含重载抽象方法的抽象类

abstract class Vehicle {
    abstract void display();
    abstract void display(String msg);
}
class Honda extends Vehicle {
    @Override
    void display() {
        System.out.println("abstract method is invoked");
    }
    @Override
    void display(String msg) {
        System.out.println(msg);
    }
}
public class abstractExample4 {
    public static void main(String[] args) {
        Honda obj = new Honda();
        obj.display();
        obj.display("overloaded abstract method is invoked");
    }
}
输出:
abstract method is invoked
overloaded abstract method is invoked

示例5: 内部抽象类

class Vehicle {
    abstract class Car {
        abstract void display();
    }
    class Honda extends Car {
        @Override
        void display() {
            System.out.println("inner abstract class is invoked");
        }
    }
}
public class abstractExample5 {
    public static void main(String[] args) {
        Vehicle obj = new Vehicle();
        Vehicle.Car c = obj.new Honda();
        c.display();
    }
}
输出:
inner abstract class is invoked

示例6: 嵌套的抽象类

abstract class Vehicle {
    abstract class Car {
        abstract void display();
    }
}
class Honda extends Vehicle {
    class FourWheller extends Car {
        @Override
        void display() {
            System.out.println("nested abstract class is invoked");
        }
    }
}
public class abstractExample6 {
    public static void main(String[] args) {
        Vehicle obj = new Honda();
        Honda h = (Honda) obj;
        Honda.FourWheller fw = h.new FourWheller();
        fw.display();
    }
}
输出:
nested abstract class is invoked
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4