我是靠谱客的博主 默默楼房,最近开发中收集的这篇文章主要介绍Java基础——抽象类(abstract)抽象类(abstract),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

抽象类(abstract)

概念

abstract修饰符可以用来修饰类和方法

用abstract修饰的类表示抽象类,抽象类是不能被实例化的,而没有使用abstract修饰的类称为具体类,具体类可以实例化
用abstract修饰的方法表是抽象方法,抽象方法是没有方法体的,不提供方法的实现,而没有用abstract修饰的方法称为具体方法,具体方法可以具有方法体

特点

  1. 如果一个类中有抽象方法,那么这个类一定是抽象类,反之不成立
  2. 子类如果继承了这个类的话要么把类声明为抽象类,或者重写该抽象方法,否则报错
  3. 抽象类是不能被实例化的(new 对象),只能用子类对象来实现
  4. 没有抽象构造方法,也没有抽象静态方法
  5. 抽象类和抽象方法不能和final连用

用法

当一个方法没有必要提供或实现此方法的时候则使用抽象方法

声明抽象方法和抽象类的代码如下

//抽象类
public abstract class TestAbstract {
//抽象方法
public abstract void method();
}

错误示例:

错误1.子类没有重写父类的抽象方法

//抽象类
public abstract class TestAbstract {
//抽象方法
public abstract void method();
}
//继承了一个抽象的父类
class OrdinaryClass extends TestAbstract{
//当我们没有重写父类的抽象方法
//	public void method() {
//
System.out.println("重写父类的构造方法");
//	}
//应当重写父类的抽象方法,或者子类也声明为抽象类
}

此时父类是一个抽象类,并且含有一个抽象方法,现在我们OrdinaryClass类继承了父类,但是我们并没有去实现重写父类的抽象方法,也没有设置这个类为抽象类,所以在此程序会报错

错误2.有抽象方法并没有声明抽象类

//普通类
public class TestAbstract {
//抽象方法
public abstract void method();
//包含抽象方法的类应当声明为抽象类
}

抽象类可以没有抽象方法,但是包括了抽象方法的类必须被定义为抽象类,否则编译不通过

错误3.抽象构造方法,抽象静态方法

//抽象类
public abstract class TestAbstract {
//抽象构造方法
public abstract TestAbstract();
//编译出错	不能用abstract来修饰构造方法(应去掉构造方法中的abstract)
public static abstract void method();
//编译出错
}

1. 一个抽象的构造器将永远不会被实现,所以它也不能声明为abstract的

2. 因为static修饰的方法是静态方法,其可以直接被类所调用。而abstract修饰的方法为抽象方法,即无方法体的方法,不能够被直接调用,需要在子类或实现类中去编写完整的方法处理逻辑后才能使用。

3. 抽象类中可以有非抽象的构造方法,在创建子类的示例时会自动调用这些构造方法,而单独的抽象类是不能被实例化的,然而可以创建一个引用变量,其类型是一个抽象类,并让他引用非抽象类的子类实例

错误4.abstract和final连用

//抽象类
public abstract final class TestAbstract {
//编译出错:final和abstract不能连用(应去掉其中的一个)
//抽象方法
public abstract void method();
}
//抽象类
public abstract class TestAbstract {
//抽象方法
public abstract final void method();
//编译出错:final和abstract不能连用(应去掉其中的一个)
}
抽象方法和抽象类都不能被final修饰,也就是说abstract不能和final修饰符连用,因为抽象类只允许创建子类来实现它的抽象方法,并且只有它的具体子类才能实例化,而final修饰的类是不允许有子类的,而且用final修饰的方法不允许被重写,因此把abstract和final放在一起的话,会导致自相矛盾

最后

以上就是默默楼房为你收集整理的Java基础——抽象类(abstract)抽象类(abstract)的全部内容,希望文章能够帮你解决Java基础——抽象类(abstract)抽象类(abstract)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部