Java——抽象类

Java——抽象类

文章参考本文!

目录

  • Java——抽象类
  • 一、抽象类的基本概念
  • 二、抽象类的使用原则
    • 举例
    • 抽象类的使用原则:
  • 三、抽象类的使用限制
    • 1、抽象类中有构造方法吗?
    • 2、抽象类可以被final修饰吗?
    • 3、抽象类可以被static修饰吗?
    • 4、可以直接调用抽象类中static声明的方法吗?

一、抽象类的基本概念

普通类:是一个完善的功能类,可以直接产生实例化对象,并且在普通类中包含有构造方法、普通方法、static方法、常量和变量等内容。
抽象类:在普通类的基础上增加抽象方法的类

抽象方法:普通的方法在声明完要加一个“{}”,表示该方法的方法体,有方法体的方法一定可以被对象直接使用。而抽象方法是没有方法体的方法,同时抽象方法还必须被关键字abstract修饰

拥有抽象方法的类就是抽象类,同时抽象类也必须被关键字abstract修饰

二、抽象类的使用原则

举例

Java——抽象类_第1张图片
Java——抽象类_第2张图片
’AbstractDemo’ is abstract; cannot be instantiated
由上面可知,抽象类不能被实例化。
为什么抽象类不能被实例化呢???
假设一个类被实例化,那么就意味着这个类可以实例化对象,有了对象就意味着,该对象有方法有属性,但是抽象类里面的抽象方法没有方法体,所以说抽象类不能被实例化。

抽象类的使用原则:

1、抽象方法必须为public或者protected(因为如果是private,那么该类不能被子类继承,其中的抽象方法也就不能被重写)。默认为public。
2、抽象类不能被实例话,可以采用向上转型的方法处理。注意:一定要在方法内部实例化
3、抽象类必须有子类,用extends继承,一个子类只能继承一个抽象类。
4、子类如果不是抽象类的话必须重写抽象类中的全部方法。(问题:如果子类是抽象类的话那还能重写父类的方法吗?答:可以,被重写的父类中的抽象方法在子类中相当于普通方法)
父类:
Java——抽象类_第3张图片
子类1重写父类中的两个方法
Java——抽象类_第4张图片
子类2只重写了一个方法,另外一个方法必须用abstract关键字修饰。而且因为子类2有抽象方法,所以子类2也是抽象类,所以子类2也不能被实例化。
Java——抽象类_第5张图片

三、抽象类的使用限制

1、抽象类中有构造方法吗?

因为抽象类中有属性,抽象类与普通类的区别只是有抽象方法,所以这些属性是要被初始化的,抽象类中的构造方法就是用来初始化的。
举例:
Java——抽象类_第6张图片
Java——抽象类_第7张图片
Java——抽象类_第8张图片

2、抽象类可以被final修饰吗?

不能,final修饰的类是最终类,不能有子类,但是抽象类必须有子类。

3、抽象类可以被static修饰吗?

范例:外部类
Java——抽象类_第9张图片
范例:内部类
Java——抽象类_第10张图片
Java——抽象类_第11张图片
Java——抽象类_第12张图片
注意点:
1、继承内部类是extends AbstractDeom.inner,这里不可以直接extends inner
2、内部类实例话的时候也是 AbstractDemo.inner。
3、外部抽象类不允许使用static声明,而内部的抽象类运行使用static声明。使用static声明的内部抽象类相当于一个外部抽象类,继承的时候使用“外部类.内部类”的形式表示类名称。

4、可以直接调用抽象类中static声明的方法吗?

任何时候,如果要执行类中的static方法的时候,都可以在没有对象的情况下直接调用,对于抽象类也一样。
Java——抽象类_第13张图片
Java——抽象类_第14张图片

补充
方法是一定要加()的,因为你要传递参数啊,但是类是一定不加()的,因为类不需要传递参数。
如下图:
public AbstractDemo(){}; 这里是构造方法,所以要加()
static abstract class inner{} 这里是内部类,所以不需要加()
Java——抽象类_第15张图片

你可能感兴趣的:(Java进阶过程,java,开发语言,后端)