java中的abstract_浅谈Java中的Abstract方法

Abstract即抽象,是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征的过程。说到抽象,我们可能会想到许多抽象派的画家,比如说梵高,毕加索。有一说一,抽象这个词还真的是很抽象的,只可意会,不可言传,但是迎难而上,本文尽力为小伙伴们言传一下Java中的Abstract方法,如有不妥之处,多加指正包涵。

我们先来看一下抽象方法的官方定义:在面向对象编程语言中抽象方法指一些只有方法声明,而没有具体方法体的方法。抽象方法一般存在于抽象类或接口中。

java中的抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体,也就是说抽象方法只需要声明而不需要实现。

下面是抽象方法的特征,我们将围绕其特征展开。

1.抽象方法不允许有方法体,只能以分号“;”结尾

2.抽象方法只能声明在抽象类中 (含有抽象方法的类必须是抽象类)

3.抽象类中可以包含0个或多个抽象方法

4.抽象方法必须被子类实现

5.如果子类不能实现父类中的抽象方法,那么子类也必须是抽象类

当一个方法为抽象方法时,意味着这个方法应该被子类的方法所重写,否则其子类的该方法仍然是abstract的,这个子类由于继承父类,拥有抽象方法,因此它也是抽象类,即声明为abstract。abstract抽象类不能用new实例化对象,abstract方法只允许声明不能实现。如果一个类中含有abstract方法,那么这个类必须用abstract来修饰,当然abstract类也可以没有abstract方法。 一个抽象类里面没有一个抽象方法可用来禁止产生这种类的对象。

在interface中所有的方法都是public abstract的,即使你没有申明它是public abstract的。在interface中所有的数据成员都是public static final的,即使你没有申明.但不能是blank final 在编译时候确定的。在Java,interface的地位和class是一样的。实现interface的类,其interface中所有的方法必须被“实现”,否则这个类成为一个抽象类。Interface可以从多个interface得到继承,但是不能继承类。一个类可以实现多个interface。

final和abstract,private和abstract,static和abstract,这些是不能放在一起的修饰符,因为abstract修饰的方法是必须在其子类中实现(覆盖),才能以多态方式调用,以上修饰符在修饰方法时期子类都覆盖不了这个方法,final是不可以覆盖,private是不能够继承到子类,所以也就不能覆盖,static是可以覆盖的,但是在调用时会调用编译时类型的方法,因为调用的是父类的方法,而父类的方法又是抽象的方法,又不能够调用,所以上的修饰符不能放在一起。

抽象方法没有提供实现部分,抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化。如:

//抽象方法

public abstract class Animal

{

public abstract void Sleep();

public abstract void Eat();

}

其实如果类包含抽象方法,那么该类也是抽象的,也必须声明为抽象的。如:

public class Animal

{

public abstract void Sleep();

public abstract void Eat();

}

抽象方法必须在派生类中重写,这一点跟接口类似

public abstract class Animal

{

public abstract void Sleep();

public abstract void Eat();

}

public class Cat : Animal

{

public override void Sleep()

{

Console.WriteLine( "Cat is sleeping" );

}

// we need implement Animal.Eat() here

}

编译器会报错:Main.cs(14): 'VSTest.Cat' does not implement inherited abstract member 'VSTest.Animal.Eat()',因为我们没有实现抽象类中所有抽象方法。

看完了本文,相信小伙伴们对Java中的Abstract方法也有了一定的了解,基本掌握了其用法,但这只是学习Java中Abstract方法的开始,想要更深入学习Java中Abstract方法,可以观看本站的Java课程,里面有各种java方法的讲解和实例,让你学习Java快人一步!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值