概述
抽象类,什么是抽象类?
1. 抽象类的产生
当编写一个类时,我们往往会为该类定义一些方法,这些方法是用来描述该类的功能具体实现方式,那么这些方法都有具体的方法体。
但是有的时候,某个父类只是知道子类应该包含怎么样的方法,但是无法准确知道子类如何实现这些方法。比如一个图形类应该有一个求周长的方法,但是不同的图形求周长的算法不一样。那该怎么办呢?**
分析事物时,发现了共性内容,就出现向上抽取。会有这样一种特殊情况,就是方法**功能声明相同,但方法功能主体不同。那么这时也可以抽取,但只抽取方法声明,不抽取方法主体。那么此方法就是一个抽象方法。**
比如:
描述JavaEE工程师:行为:工作。
描述Android工程师:行为:工作。
**JavaEE工程师和Android工程师之间有共性,可以进行向上抽取。**抽取它们的所属共性类型:研发部员工。由于JavaEE工程师和Android工程师都具有工作功能,但是他们具体工作内容却不一样。这时在描述研发部员工时,发现了有些功能(工作)不具体,这些不具体的功能,需要在类中标识出来,通过java中的关键字abstract(抽象)。
当定义了抽象函数的类也必须被abstract关键字修饰,被abstract关键字修饰的类是抽象类。
2. 抽象类&抽象方法的定义
抽象方法定义的格式:
public abstract 返回值类型 方法名(参数);
看如下代码:
//研发部员工
abstract class Developer {
public abstract void work();//抽象函数。需要abstract修饰,并分号;结束
}
//JavaEE工程师
class JavaEE extends Developer{
public void work() {
System.out.println("正在研发淘宝网站");
}
}
//Android工程师
class Android extends Developer {
public void work() {
System.out.println("正在研发淘宝手机客户端软件");
}
}
3.抽象类的特点
看以下代码:
Develop类
/*
* 定义类开发工程师类
* EE开发工程师 : 工作
* Android开发工程师 : 工作
*
* 根据共性进行抽取,然后形成一个父类Develop
* 定义方法,工作: 怎么工作,具体干什么呀
*
* 抽象类,不能实例化对象, 不能new的
* 不能创建对象的原因: 如果真的让你new了, 对象.调用抽象方法,抽象方法没有主体,根本就不能运行
* 抽象类使用: 定义类继承抽象类,将抽象方法进行重写,创建子类的对象
*/
public abstract class Develop {
//定义方法工作方法,但是怎么工作,说不清楚了,讲不明白
//就不说, 方法没有主体的方法,必须使用关键字abstract修饰
//抽象的方法,必须存在于抽象的类中,类也必须用abstract修饰
public abstract void work();
}
JavaEE类
/*
* 定义类,JavaEE的开发人员
* 继承抽象类Develop,重写抽象的方法
*/
public class JavaEE extends Develop{
//重写父类的抽象方法
//去掉abstract修饰符,加上方法主体
public void work(){
System.out.println("JavaEE工程师在开发B/S 软件");
}
}
Android类
/*
* 定义Android类,继承开发人员类
* 重写抽象方法
*/
public class Android extends Develop{
public void work(){
System.out.println("Android工程师开发手机软件");
}
}
Test测试类
/*
* 测试抽象类
* 创建他的子类的对象,使用子类的对象调用方法
*/
public class Test {
public static void main(String[] args) {
JavaEE ee = new JavaEE();
ee.work();
Android and = new Android();
and.work();
}
}
- 抽象类和抽象方法都需要被abstract修饰。抽象方法一定要定义在抽象类中。
- 抽象方法只能有声明;没有大括号囊括的
- 抽象类不可以直接创建对象,原因:调用抽象方法没有意义。
- 抽象类的使用必须通过子类来使用,并且只有覆盖了抽象类中所有的抽象方法后,其子类才可以创建对象。否则该子类还是一个抽象类,因为子类继承了所有父类属性和方法,如果子类里不将父类的所有抽象方法重写,那么子类里还存在从父类继承过来的抽象方法,因此子类存在抽象方法,所有子类也应该是抽象类。无法new一个子类实例。
- 设计思想: 之所以继承抽象类,更多的是在思想,是面对共性类型操作会更简单。抽象类的作用:继承体系。抽象类,强制子类重写抽象方法。
4. 抽象类的细节问题
- 抽象类一定是个父类?
是的,因为不断抽取而来的。 - 抽象类中是否可以不定义抽象方法。
是可以的,那这个抽象类的存在到底有什么意义呢?不让该类创建对象,方法可以直接让子类去使用。
/*
* 抽象类,可以没有抽象方法,可以定义带有方法体的方法
* 让子类继承后,可以直接使用
*/
public abstract class Animal {
public void sleep(){
System.out.println("动物睡觉");
}
// private abstract void show();
//抽象方法,需要子类重写, 如果父类方法是私有的,子类继承不了,也就没有了重写
}
public class Cat extends Animal{
}
public class Test {
public static void main(String[] args) {
//Cat c = new Cat();
new Cat().sleep();
}
}
- 抽象关键字abstract不可以和哪些关键字共存?
-
- private:私有的方法子类是无法继承到的,也不存在覆盖,而abstract和private一起使用修饰方法,abstract既要子类去实现这个方法,而private修饰子类根本无法得到父类这个方法。互相矛盾。
-
- final
-
- static
最后
以上就是任性裙子为你收集整理的重走Java基础:面向对象-抽象类(abstract)抽象类,什么是抽象类?的全部内容,希望文章能够帮你解决重走Java基础:面向对象-抽象类(abstract)抽象类,什么是抽象类?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复