个性化阅读
专注于IT技术分析

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初学者,学习界面,跳过这个例子。

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
赞(0)
未经允许不得转载:srcmini » Java抽象类

评论 抢沙发

评论前必须登录!