Java基础——抽象类(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放在一起的话,会导致自相矛盾
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值