java abstract修饰符

本文详细解析了抽象类和抽象方法的概念与使用规则,并解释了为何抽象类不能被实例化的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

abstract修饰符

  • 用abstract修饰的类叫做抽象类,抽象类不能被实例化
  • 用abstract修饰的方法叫做抽象方法,抽象方法没有方法体

抽象类的规则:

1、抽象类可以没有抽象方法,但有抽象方法的类必须是抽象类;
2、抽象类的子类没有重写实现父类的所有抽象方法(当然可以实现为空,即方法体为空),则子类必须被定义为抽象类;


abstract class Base{
	abstract void method1();
	abstract void method2();
}
class Sub extends Base{		//编译出错,Sub类没有实现父类的所有抽象方法,必须被定义为抽象类
	void method1(){
		System.out.println("method1");
	}
}

3、抽象类可以有构造方法,但不能是抽象构造方法;

abstract class Base{
	abstract void Base();	//编译出错,构造方法不能是抽象的
}

4、抽象类可以有静态方法,但是没有静态抽象方法;

abstract class Base{
	abstract void Base();	//编译出错,构造方法不能是抽象的
	static abstract void method1();  //编译出错,不能有抽象静态方法
	static void method2();  //可以有静态方法
}

5、抽象类和抽象方法不能被final修饰符修饰,因为抽象方法必须有子类实现,而final不允许有子类,不能被子类方法覆盖;abstract 与 final不能连用


为什么抽象类不允许被实例化?

1、在语义上

抽象类表示从一些具体类中抽象出来的类型,例如苹果类,香蕉类是具体类,水果类是抽象类。自然界并不存在水果类本身的实例。苹果对象是水果对象,香蕉对象也是水果对象。
  • 当父类是具体类时,父类的对象包括父类本身的对象和所有子类的具体对象;
  • 当父类是抽象类时,父类的对象包括所有具体子类的对象;
因此,所谓的不能被实例化,是指不能创建抽象类本身的实例

2、在语法上

假如可以创建抽象类本身的实例,因为method2() 方法是抽象方法,没有方法体,所有无法执行。因此,java编译器不允许创建抽象类的实例。
abstract class Base{
	public void method1(){	//普通方法
	 }  
	public abstract void method2();  //抽象方法
}

Bsse base = new Base();//假使java编译器没报错
base.method1();
base.method2();//运行时java虚拟机无法执行这个方法



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值