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();
}
}
输出:
示例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();
}
}
输出:
示例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