抽象类(abstract)
概念
abstract修饰符可以用来修饰类和方法
用abstract修饰的类表示抽象类,抽象类是不能被实例化的,而没有使用abstract修饰的类称为具体类,具体类可以实例化
用abstract修饰的方法表是抽象方法,抽象方法是没有方法体的,不提供方法的实现,而没有用abstract修饰的方法称为具体方法,具体方法可以具有方法体
特点
- 如果一个类中有抽象方法,那么这个类一定是抽象类,反之不成立
- 子类如果继承了这个类的话要么把类声明为抽象类,或者重写该抽象方法,否则报错
- 抽象类是不能被实例化的(new 对象),只能用子类对象来实现
- 没有抽象构造方法,也没有抽象静态方法
- 抽象类和抽象方法不能和final连用
用法
当一个方法没有必要提供或实现此方法的时候则使用抽象方法
声明抽象方法和抽象类的代码如下
复制代码
1
2
3
4
5
6//抽象类 public abstract class TestAbstract { //抽象方法 public abstract void method(); }
错误示例:
错误1.子类没有重写父类的抽象方法
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15//抽象类 public abstract class TestAbstract { //抽象方法 public abstract void method(); } //继承了一个抽象的父类 class OrdinaryClass extends TestAbstract{ //当我们没有重写父类的抽象方法 // public void method() { // System.out.println("重写父类的构造方法"); // } //应当重写父类的抽象方法,或者子类也声明为抽象类 }
此时父类是一个抽象类,并且含有一个抽象方法,现在我们OrdinaryClass类继承了父类,但是我们并没有去实现重写父类的抽象方法,也没有设置这个类为抽象类,所以在此程序会报错
错误2.有抽象方法并没有声明抽象类
复制代码
1
2
3
4
5
6
7//普通类 public class TestAbstract { //抽象方法 public abstract void method(); //包含抽象方法的类应当声明为抽象类 }
抽象类可以没有抽象方法,但是包括了抽象方法的类必须被定义为抽象类,否则编译不通过
错误3.抽象构造方法,抽象静态方法
复制代码
1
2
3
4
5
6
7
8
9//抽象类 public abstract class TestAbstract { //抽象构造方法 public abstract TestAbstract(); //编译出错 不能用abstract来修饰构造方法(应去掉构造方法中的abstract) public static abstract void method(); //编译出错 }
1. 一个抽象的构造器将永远不会被实现,所以它也不能声明为abstract的
2. 因为static修饰的方法是静态方法,其可以直接被类所调用。而abstract修饰的方法为抽象方法,即无方法体的方法,不能够被直接调用,需要在子类或实现类中去编写完整的方法处理逻辑后才能使用。
3. 抽象类中可以有非抽象的构造方法,在创建子类的示例时会自动调用这些构造方法,而单独的抽象类是不能被实例化的,然而可以创建一个引用变量,其类型是一个抽象类,并让他引用非抽象类的子类实例错误4.abstract和final连用
复制代码
1
2
3
4
5
6
7//抽象类 public abstract final class TestAbstract { //编译出错:final和abstract不能连用(应去掉其中的一个) //抽象方法 public abstract void method(); }
复制代码
抽象方法和抽象类都不能被final修饰,也就是说abstract不能和final修饰符连用,因为抽象类只允许创建子类来实现它的抽象方法,并且只有它的具体子类才能实例化,而final修饰的类是不允许有子类的,而且用final修饰的方法不允许被重写,因此把abstract和final放在一起的话,会导致自相矛盾
1
2
3
4
5
6
7//抽象类 public abstract class TestAbstract { //抽象方法 public abstract final void method(); //编译出错:final和abstract不能连用(应去掉其中的一个) }
最后
以上就是默默楼房最近收集整理的关于Java基础——抽象类(abstract)抽象类(abstract)的全部内容,更多相关Java基础——抽象类(abstract)抽象类(abstract)内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复