Detailed example of defining abstract properties in Java
This article mainly introduces relevant information about how to define an abstract attribute example in Java. Friends who need it can refer to it
Preface
This article mainly introduces to you the relevant content of defining an abstract attribute in Java, and shares it for your reference and study. I won’t say much below, let’s take a look at the detailed introduction:
Abstract keyword is usually used in classes and methods to delegate the implementation of certain behaviors to subclasses. Since Java does not support abstract properties, you will get a compile-time error if you try to mark a class property as abstract.
In this tutorial, we will introduce two methods of defining abstract properties that can be set by subclasses without using the Abstract keyword.
Practical Case
Suppose we want to implement a transaction log module to record specific transaction information. We want this module to be abstract so that we can implement different logging methods, such as logging to a file or database.
Our engine uses predefined delimiters to concatenate the information in the log and store it in a String. Which delimiter should be used depends on the logging rules. For example, the character "," can be used to separate different parts of the information in the log record.
Therefore, delimiters appear to be abstract to our engine and need to be explicitly defined by each logging rule.
Below I provide two ways to delegate the definition of separators to subclasses.
Defining a constructor with parameters in an abstract class
The first way to define dynamic properties in an abstract class is : Define a constructor with one parameter.
So we can implement this engine like this:
// TransactionManager.java public abstract class TransactionManager { private String separator; public TransactionManager(String separator) { this.separator = separator; } public abstract void writeTransaction(String result); public Transaction startTransaction() { Transaction transaction = new Transaction(System.currentTimeMillis()); return transaction; } public void endTransaction(Transaction t) { long processingTime = System.currentTimeMillis() - t.getStartTime(); StringBuilder logBuilder = new StringBuilder(); logBuilder.append(t.getStartTime()); // Notice the use of this.separator logBuilder.append(this.separator); logBuilder.append(processingTime); logBuilder.append(this.separator); logBuilder.append(t.getData()); String result = logBuilder.toString(); writeTransaction(result); } }
When defining a constructor with parameters in an abstract class, the subclass will be forced to define itself constructor and call super()
. This way we can force the separator attribute to depend on the logging mechanism in use.
Note: Our engine implements static behavior common to all logging mechanisms: startTransaction()
, endTransaction()
, while leaving the dynamic behavior writeTransaction()
to subclasses for implementation.
Now, if we want to create a transaction manager and use it to record the log content to a file, then we can define it like this:
public class TransactionManagerFS extends TransactionManager{ // The IDE forces you to implement constructor. public TransactionManagerFS(String separator) { super(separator); } @Override public void writeTransaction(String result) { System.out.println("The following transaction has just finished: " ); System.out.println(result); } }
Next do a test to see how the code works
public static void main(String[] args) throws InterruptedException { // we pass the separator explicitly in the constructor TransactionManager transactionManager = new TransactionManagerFS(","); Transaction transaction = transactionManager.startTransaction(); transaction.setData("This is a test transaction !!"); Thread.sleep(1500); transactionManager.endTransaction(transaction); }
Output:
The following transaction has just finished: 1502179140689,1501,This is a test transaction !!
Pass the delimiter through the getter method
Another way to implement dynamic properties is by defining an abstract getter method, which is based on the current log record Mechanism to retrieve the required delimiter. In our engine, when a delimiter is needed, it can be obtained by calling this getter method.
Next we modify the engine like this:
public abstract class TransactionManager { public abstract String getSeperator(); public abstract void writeTransaction(String result); public Transaction startTransaction() { Transaction transaction = new Transaction(System.currentTimeMillis()); return transaction; } public void endTransaction(Transaction t) { long processingTime = System.currentTimeMillis() - t.getStartTime(); StringBuilder logBuilder = new StringBuilder(); logBuilder.append(t.getStartTime()); // Notice the use of getSeparator() logBuilder.append(getSeperator()); logBuilder.append(processingTime); logBuilder.append(getSeperator()); logBuilder.append(t.getData()); String result = logBuilder.toString(); writeTransaction(result); } }
In addition, modify TransactionManagerFS as follows:
public class TransactionManagerFS extends TransactionManager{ @Override public String getSeperator() { return ","; } @Override public void writeTransaction(String result) { System.out.println("The following transaction has just finished: " ); System.out.println(result); } }
Then, modify main to use the new implementation and ensure you get the correct results.
public static void main(String[] args) throws InterruptedException { // The separator is defined implicitly using getSeparator() method of the manager TransactionManager transactionManager = new TransactionManagerFS(); Transaction transaction = transactionManager.startTransaction(); transaction.setData("This is a test transaction !!"); Thread.sleep(1500); transactionManager.endTransaction(transaction); }
Output:
The following transaction has just finished: 1502179140689,1501,This is a test transaction !!
Summary
The above is the detailed content of Detailed example of defining abstract properties in Java. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



Guide to Perfect Number in Java. Here we discuss the Definition, How to check Perfect number in Java?, examples with code implementation.

Guide to Random Number Generator in Java. Here we discuss Functions in Java with examples and two different Generators with ther examples.

Guide to Weka in Java. Here we discuss the Introduction, how to use weka java, the type of platform, and advantages with examples.

Guide to Smith Number in Java. Here we discuss the Definition, How to check smith number in Java? example with code implementation.

In this article, we have kept the most asked Java Spring Interview Questions with their detailed answers. So that you can crack the interview.

Java 8 introduces the Stream API, providing a powerful and expressive way to process data collections. However, a common question when using Stream is: How to break or return from a forEach operation? Traditional loops allow for early interruption or return, but Stream's forEach method does not directly support this method. This article will explain the reasons and explore alternative methods for implementing premature termination in Stream processing systems. Further reading: Java Stream API improvements Understand Stream forEach The forEach method is a terminal operation that performs one operation on each element in the Stream. Its design intention is

Guide to TimeStamp to Date in Java. Here we also discuss the introduction and how to convert timestamp to date in java along with examples.

Java is a popular programming language that can be learned by both beginners and experienced developers. This tutorial starts with basic concepts and progresses through advanced topics. After installing the Java Development Kit, you can practice programming by creating a simple "Hello, World!" program. After you understand the code, use the command prompt to compile and run the program, and "Hello, World!" will be output on the console. Learning Java starts your programming journey, and as your mastery deepens, you can create more complex applications.
