首页 > 编程语言 >Java抽象类

Java抽象类

时间:2023-02-04 23:14:09浏览次数:56  
标签:Java void class println 抽象类 abstract

在java中用abstract关键字声明的类称为抽象类。 它可以有抽象和非抽象方法(带主体的方法)。

在学习java抽象类之前,先来了解java中的抽象。

Java中的抽象

抽象是隐藏实现细节并仅向用户显示功能的过程。

另一种方式,它只向用户显示重要的事情,并隐藏内部详细信息,例如:发送短信,只需输入文本并发送消息。您也不需要知道有关邮件传递的内部处理过程。

抽象可以让你专注于对象做什么(实现的功能),而不是它如何做。

实现抽象的方法

在java中有两种实现抽象的方法,它们分别是:

  1. 抽象类(部分)
  2. 接口 (完全)

1. Java中的抽象类

使用 abstract关键字声明的类被称为抽象类。需要扩展和实现它的方法。 它不能被实例化。

抽象类示例

abstract class A{}
Java

抽象方法

一个被声明为 abstract 而没有实现的方法称为抽象方法。

抽象方法示例

abstract void printStatus();//no body and abstract
Java

具有抽象方法的抽象类的示例

在这个例子中,Bike是一个抽象类,只包含一个抽象方法:run()。 它由 Honda 类提供实现。

abstract class Bike {
    abstract void run();
}

class Honda4 extends Bike {
    void run() {// run 方法的实现
        System.out.println("running safely..");
    }

    public static void main(String args[]) {
        Bike obj = new Honda4();
        obj.run();
    }
}
Java

上面示例中的代码执行结果如下 -

running safely..
Java

理解抽象类的真实应用场景

在这个例子中,Shape是一个抽象类,它的实现分别由RectangleCircle类提供。 大多数情况下,我们不知道实现类(即对最终用户隐藏),实现类的对象由工厂方法提供。
工厂方法是用于返回类的实例的方法。 稍后我们将在下一节中了解和学习工厂方法
在这个例子中,创建Rectangle类的实例,Rectangle类的draw()方法将被调用。创建一个类文件:TestAbstraction1.java ,它的代码如下所示 -

abstract class Shape {
    abstract void draw();
}

// In real scenario, implementation is provided by others i.e. unknown by end
// user
class 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 user
class TestAbstraction1 {
    public static void main(String args[]) {
        Shape s = new Circle1();// In real scenario, object is provided through
                                // method e.g. getShape() method
        s.draw();
    }
}
Java

上面代码执行结果如下 -

drawing circle
Java

在java中抽象类的另一个例子

创建一个Java文件: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() + " %");
    }
}
Java

上面代码执行结果如下 -

Rate of Interest is: 7 %
Rate of Interest is: 8 %
Java

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

抽象类可以有数据成员,抽象方法,方法体,构造函数甚至main()方法。创建一个Java文件:TestAbstraction2.java,代码如下所示 -

//example of abstract class that have method body  
abstract class Bike {
    Bike() {
        System.out.println("bike is created");
    }

    abstract void run();

    void changeGear() {
        System.out.println("gear changed");
    }
}

class Honda extends Bike {
    void run() {
        System.out.println("running safely..");
    }
}

class TestAbstraction2 {
    public static void main(String args[]) {
        Bike obj = new Honda();
        obj.run();
        obj.changeGear();
    }
}
Java

上面代码执行结果如下 -

bike is created
running safely..
gear changed
Java

规则:如果在类中有任何抽象方法,那个类必须声明为抽象的。

class Bike12{  
    abstract void run();  
}
Java

上面的 Bike12 是无法编译通过的。

规则:如果你扩展任何具有抽象方法的抽象类,必须提供方法的实现或使这个类抽象化。

抽象类的另一个真实场景

抽象类也可以用于提供接口的一些实现。 在这种情况下,终端用户可能不会被强制覆盖接口的所有方法。

注意:如果您是初学者到Java,请跳过此示例先学习接口(interface)

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();
    }
}
Java

上面代码执行结果如下 -

I am a
I am b
I am c
I am d
//更多请阅读:https://www.yiibai.com/java/abstract-class-in-java.html#article-start

标签:Java,void,class,println,抽象类,abstract
From: https://www.cnblogs.com/cnetsa/p/17092585.html

相关文章

  • Java接口
    java中的接口是类的蓝图。它有静态常量和抽象方法。java中的接口是一种实现抽象的机制。接口中只有抽象方法而不是方法体。接口用于在Java中实现抽象和多重继承。Java......
  • java中使用xml基础
    XML概述XML的全称为(EXtensibleMarkupLanguage),是一种可扩展的标记语言标记语言:通过标签来描述数据的一门语言(标签有时我们也将其称之为元素)可扩展:标签的名字是......
  • IDEA中如何利用Maven给JAVA添加第三方库和打包问题
    从今天开始,遇到技术上的问题都会在这里写下来,虽然有可能都是小儿科问题,但是自己成功解决出来,还是很开心的。从很久之前,我就在java导包的过程中遇到问题,他不像python那......
  • java学习
    java学习快捷键1.psvm和sout(打印输出的快捷键)2.在使用浮点类型时注意浮点数是一个近似值,在处理银行业务时需要使用的是BigDecimal数学工具类3.在强制转换类型的时候......
  • Java多线程01——多线程的创建
    1进程和线程进程:进程是并发执行程序在执行过程中,资源分配和管理的基本单位。进程可以理解为一个应用程序的执行过程,应用程序一旦执行,就是一个进程。线程:线程是进程的一个执......
  • java基础:数组
    概述数组是相同类型数据的有序集合可以是任何类型每一个数据被称为该数组的一个数组元素,可以使用下标访问每一个元素下标从0开始,按顺序递增数组长度是固定的,创建后不......
  • java基础:方法
    方法方法是解决一类问题的步骤的有序组合包含于类/对象中设计原则方法的原子性:一个方法只实现一个功能定义与调用方法的组成:方法的调用若方法返回值为空......
  • Java instanceof运算符
    javainstanceof运算符用于测试指定对象是否是指定类型(类或子类或接口)的实例。java中的instanceof也称为类型比较运算符,因为它将类型与实例进行比较。它返回true或fal......
  • Java静态绑定和动态绑定
    将方法调用连接到方法体称为绑定。在java中有两种类型的绑定:静态绑定(也称为早期绑定)。动态绑定(也称为后期绑定)。了解类型下面让我们来了解实例的类型。1.变......
  • Android集成mupdf,实现手写笔签字,手指翻页的java代码
    importandroid.graphics.Bitmap;importandroid.graphics.Color;importandroid.graphics.RectF;importandroid.util.Log;importjava.util.LinkedList;importc......