java基础教程:面向对象之抽象类(16)


上节课我们讲述了继承的概念和实现。今天呢,在继承的基础上我们继续扩展。


今天的内容是:

1、抽象类的概念

2、抽象类的语法

3、抽象方法

4、抽象类的主要使用方式


第一部分:抽象的概念

抽象类是什么?其实抽象类就是普通类的再抽象类,并且呢,这个抽象类拥有抽象行为的能力


举例来说,我们可以把人抽象为男人和女人两个类。那么,我们可以再将男人和女人再抽象为人这个抽象类。

这时,就会有人说,普通类也可以啊?

是的,普通类也可以依靠继承作为其他类的父类,但是呢,他没有抽象类的抽象能力。

抽象能力怎么体现的呢?其实就是抽象方法。

只有抽象类可以定义抽象方法,普通类不能定义抽象方法


抽象方法我们后面再来介绍,大家就先知道这个概念就可以。


我们还是通过例子来理解:

我们把类(男人、女人)抽象为抽象类(人)这个抽象类以后,人的这个类中就可以定义抽象方法。

那,什么样的方法适合定义为抽象的呢?其实就是子类的行为体现不一样,但是子类都有这个行为。

对于男人和女人这个例子来讲,我们就可以举爱好这个行为的例子。女人喜欢逛吃,男人喜欢玩乐

这个行为在不同的子类(男人,女人)当中是不同的表现,但是呢,这个行为对于人来讲都是存在的

如此以来,就可以把这个公共的行为在父类(人)中先定义一个抽象的方法,不去实现细节。

等到子类(男人、女人)去继承人这个类时,实现这个行为时再体现。例子在后面。


第二部分:抽象类的定义

那么,一个抽象类如何定义呢?其实很简单。就是在class前面再加一个abstract关键字

例如人作为抽象类:


abstract class Person{

} 

抽象类和普通类的区别

1、抽象类有abstract关键字,普通类没有

2、抽象类可以有抽象方法,而不是一定要有普通类不能有抽象方法。

3、抽象类不能实例化对象

4、抽象类可以和普通类一样定义属性和方法。


我们用一张图对比下抽象类和普通类:




第三部分:抽象方法

我们了解完抽象类后,我们再来了解下它当中的神秘角色--抽象方法。

我们先来看它的定义:


我们在方法的修饰符当中加入abstract关键字,不编写方法的实现,这样的方法就是抽象方法。

格式:

修饰符 abstract 方法返回类型 方法名(参数列表);

/**
 * 抽象类
 * 
 * @author Dream ma
 *
 */
public abstract class Person {
	
	/**
	 * 抽象方法:爱好
	 * 男人女人都有这个行为,但是他们的体现都不一样。
	 * 在父类里只定义它的结构,不写方法体。
	 * 等到男人女人去继承这个类的时候自己去实现自己的行为。
	 */
	abstract void hobby();

}


从上面的代码可以看出, 抽象方法和普通方法的区别

1、抽象方法有abstract关键字;普通方法没有

2、抽象方法没有方法体(大括号和里边的内容);普通方法有方法体。

3、抽象方法在实现它的子类中必须被实现;普通方法自己有实现,子类再实现就是重写了。



第四部分:抽象类的使用

学习了抽象类和抽象方法的定义和知识,我们来总结下他们的使用:


1、使用方式一:作为类的模板

一、抽象类是其他类的抽象,可以作为其他类的父类。

二、抽象类可以定义一个抽象方法,实现子类必须去实现这个方法。

基于以上两点,并且由于抽象类无法被实例化,所以抽象类一般作为其他子类的模板,里边定义公共的属性和公共行为,而不作为实例类


那有人就会问,普通类也可以作为模板啊。但是呢,普通类没有抽象方法。

没有抽象方法的话,子类去继承时就没有强制性。子类可以不重写方法。

如果我们的逻辑里需要子类必须有哪些行为,这个时候抽象类就拥有优势。

抽象类定义的抽象方法在实现子类里必须要被实现的。所以,抽象类在作为模板时更规范,适合为子类指定约束。


2、使用方式二:减少类实现接口时,实现的方法个数

我们后面会学习接口,接口里的方法也必须被实现类实现。

那么抽象类可以减少一些接口实现类实现的方法个数。

举例,接口A有a,b,c,d四个方法,但是这个时候我的某个类只需要其中的两个方法b,c,

这时候就可以先定义一个抽象类B,让他去实现接口A,使用空方法体实现a,d方法,把b,c继承下来作为抽象方法。

这个时候实现类C就可以继承B,只用实现b,c方法了。。是不是很棒??


今天的内容是:

1、抽象类的概念

2、抽象类的定义

3、抽象方法的定义

4、抽象类的使用


以上就是今天的内容,你学会 了吗?



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值