Java教程

Java 抽象类

使用abstract关键字声明的类在Java中被称为抽象类。它可以具有抽象方法和非抽象方法(与主体有关的方法)。
在学习Java抽象类之前,让我们首先了解Java中的抽象。

Java中的抽象

抽象是一个隐藏实现细节并仅向用户显示功能的过程。
另一种方式,它仅向用户显示基本内容并隐藏内部细节,例如,在您键入文本并发送消息的位置发送SMS。您不知道有关消息传递的内部处理。
抽象使您可以专注于object所做的工作它是如何做到的。

实现抽象的方法

在Java中有两种实现抽象的方法
抽象类(0到100%) 接口(100%)

Java中的抽象类

被声明为抽象的类称为 抽象类。它可以具有抽象和非抽象方法。它需要扩展并实现其方法。
要记住的要点
必须使用abstract关键字声明抽象类。 它可以具有抽象和非抽象方法。 无法实例化。 它可以具有构造函数和静态方法。 它可以具有最终方法,这些方法将强制子类不更改方法的主体。 Java抽象类的规则
抽象类的示例
abstract class A{
}

Java中的抽象方法

被声明为抽象且没有实现的方法被称为抽象方法。
抽象方法示例
abstract void printStatus();
//no method body and abstract

具有抽象方法的Abstract类示例

在此示例中,Bike是一个仅包含一个抽象方法运行的抽象类。它的实现由Honda类提供。
abstract class Bike{
    abstract void run();
}
class Honda4 extends Bike{
    void run(){
        System.out.println("running safely");
    }
    public static void main(String args[]){
        Bike obj = new Honda4();
        obj.run();
    }
}
running safely

了解Abstract类的真实情况

在此示例中,Shape是抽象类,其实现由Rectangle和Circle类提供。
大多数情况下,我们不了解实现类(对最终用户隐藏),而实现类的对象由 工厂方法提供。
工厂方法是一种返回类实例的方法。
在此示例中,如果您创建Rectangle类的实例,则将调用Rectangle类的draw()方法。
文件: TestAbstraction1.java
abstract class Shape{
    abstract void draw();
}
//In real scenario, implementation is provided by others i.e. unknown by end userclass Rectangle extends Shape{
    void draw(){
        System.out.println("drawing rectangle");
    }
}
class Circle1 extends Shape{
    void draw(){
        System.out.println("drawing circle");
    }
}
//In real scenario, method is called by programmer or userclass TestAbstraction1{
    public static void main(String args[]){
        Shape s=new Circle1();
        //In a real scenario, object is provided through method, e.g., getShape() methods.draw();
    }
}
drawing circle

java中Abstract类的另一个示例

文件: TestBank.java
abstract class Bank{
    abstract int getRateOfInterest();
}
class SBI extends Bank{
    int getRateOfInterest(){
        return 7;
    }
}
class PNB extends Bank{
    int getRateOfInterest(){
        return 8;
    }
}
class TestBank{
    public static void main(String args[]){
        Bank b;
        b=new SBI();
        System.out.println("Rate of Interest is: "+b.getRateOfInterest()+" %");
        b=new PNB();
        System.out.println("Rate of Interest is: "+b.getRateOfInterest()+" %");
    }
}
Rate of Interest is: 7 %Rate of Interest is: 8 %

具有构造函数,数据成员和方法的抽象类

抽象类可以具有数据成员,抽象方法,方法主体(非抽象方法),构造函数,甚至main()方法。
文件: TestAbstraction2.java
//Example of an abstract class that has abstract and non-abstract methods abstract class Bike{
    Bike(){
        System.out.println("bike is created");
    }
    abstract void run();
    void changeGear(){
        System.out.println("gear changed");
    }
}
//Creating a Child class which inherits abstract class class Honda extends Bike{
    void run(){
        System.out.println("running safely..");
    }
}
//Creating a Test class which calls abstract and non-abstract methods class TestAbstraction2{
    public static void main(String args[]){
        Bike obj = new Honda();
        obj.run();
        obj.changeGear();
    }
}
bike is created running safely.. gear changed

注意: 规则: 如果类中存在抽象方法,则该类必须是抽象方法。

class Bike12{
    abstract void run();
}
compile time error

注意: 规则: 如果要扩展具有抽象方法的抽象类,则必须提供该方法的实现或使该类抽象。


抽象类的另一种真实情况

抽象类也可以用于提供interface的某些实现。在这种情况下,最终用户可能不会被强制重写接口的所有方法。
注意: 如果您是Java的初学者,请先学习接口并跳过此示例。
interface A{
    void a();
    void b();
    void c();
    void d();
}
abstract class B implements A{
    public void c(){
        System.out.println("I am c");
    }
}
class M extends B{
    public void a(){
        System.out.println("I am a");
    }
    public void b(){
        System.out.println("I am b");
    }
    public void d(){
        System.out.println("I am d");
    }
}
class Test5{
    public static void main(String args[]){
        A a=new M();
        a.a();
        a.b();
        a.c();
        a.d();
    }
}
Output:I am a I am b I am c I am d
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4