猿教程 Logo

java抽象类

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

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


Java中的抽象

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

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

抽象可以让你专注于对象做什么,而不是它如何做。

实现抽象的方法

有两种方法在java中实现抽象

  1. 抽象类(0至100%)

  2. 接口(100%)


Java中的抽象类

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

抽象类示例

相关实例:

abstract class A{}

抽象方法

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

抽象方法示例

相关实例:

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

有抽象方法的抽象类的例子

在这个例子中,Bike的抽象类只包含一个抽象方法run。 它的实现由本田类提供。

相关实例:

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..

理解抽象类的真实场景

在这个例子中,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 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();
}
}
运行结果:
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 %

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

抽象类可以有数据成员,抽象方法,方法体,构造函数甚至main()方法。

文件:TestAbstract2.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();
 }
}
运行结果:
bike is created
       running safely..
       gear changed

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

相关实例:

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

规则:如果您要扩展具有抽象方法的任何抽象类,则必须提供方法的实现或使此类抽象。


抽象类的另一个真实场景

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

注意:如果您是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();
}}
Output:I am a
       I am b
       I am c
       I am d


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/Java/abstract-class-in-java.html