Java抽象类

用abstract关键字声明的类叫做抽象类在Java中。它可以有抽象的、非抽象方法(方法与body)。
在学习Java抽象类之前,让我们先了解Java的抽象。
在Java中抽象
抽象是一个隐藏实现细节的过程和只显示功能给用户。
另一种方式,它只显示用户必不可少的事情,隐藏了内部细节,例如,发送短信,你输入文本和发送消息。你不知道关于消息传递的内部处理。
抽象可以让你关注什么对象而不是它是如何。
实现抽象方法
有两种方法可以在java实现的抽象

  1. 抽象类(0到100?
  2. 接口(100?
抽象类在Java中
一个类声明为抽象的被称为一个抽象类。它可以有抽象的、非抽象方法。它需要扩展及其实现方法。它不能被实例化。
要记住
  • 必须声明一个抽象类和抽象的关键字。
  • 它可以有抽象的、非抽象方法。
  • 它不能被实例化。
  • 它还可以有构造函数和静态方法。
  • 它可以有最终的方法将迫使子类不改变身体的方法。
抽象类的例子
abstract class A{}

在Java中抽象方法
一个方法声明为抽象的和没有实现称为一个抽象方法。
抽象方法的例子
abstract void printStatus(); //no method body and abstract

抽象类,它有一个抽象方法的例子
在这个例子中,自行车是一个抽象类,它只包含一个抽象方法。其实现是本田所提供的类。
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

理解抽象类的真实场景
在这个例子中,形状是抽象类,它的实现是由矩形和圆类提供的。
大多数情况下,我们不知道实现类(隐藏终端用户),和一个对象的实现类是由工厂提供的方法。
工厂方法是一个方法,返回类的实例。稍后我们将了解工厂方法。
在这个例子中,如果你创建一个矩形类的实例,画矩形类的()方法将被调用。
文件: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 a real scenario,object is provided through method,e.g.,getShape() method s.draw(); } }

drawing circle

抽象类在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()+" %"); }}

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

抽象类的构造函数,数据成员和方法
一个抽象类可以有一个数据成员、抽象方法,方法主体(非抽象方法),构造函数,甚至主要()方法。
文件: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

规则:如果你是扩展一个抽象类,它有一个抽象方法,你必须提供的实现方法或使这类抽象的。抽象类的另一个真实的场景
【Java抽象类】抽象类也可以用来提供一些接口的实现。在这种情况下,最终用户可能不是被迫覆盖接口的所有方法。
注意:如果你是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

    推荐阅读