“抽象类”的定义及其与“普通类”的区别

我们都知道在多态中子类要重写父类的方法,执行时也执行子类中的方法,这就显得父类中的方法体有点子虚乌有了,
也就是说可以直接省略方法体,而只定义一个方法就可以了。因此,我们称一个没有方法体的方法为抽象方法
而当一个“类”中有抽象方法时,则该类为抽象类(即要加abstract),否则语法错误,例如:

public abstract class Mammal{
	public abstract void move();
	public abstract void sleep();
}

也就是说一个抽象类中可以没有抽象方法,但有抽象方法的类一定要是抽象类!!!

而且,当父类中有抽象方法时,子类必须实现父类中的所有抽象方法(即重写),否则该类(子类)也要为抽象类。例如:

public abstract class Cat extends Mammal{
	@Override	//重写的标志
	public void move() {
		System.out.println("正在屋顶上飞奔...");
	}
}

此外,抽象类不能创建对象,但可以构造方法,例如:

public abstract class Cat extends Mammal{
	
	public Cat (){}	//可以有构造方法
}
public class Test{
	Cat cat = new Cat();
	这是错的×,抽象类不能创建对象
}

还有重要的一点就是,抽象类和抽象方法都不能加final和static,加final的抽象类不能被继承,其中的方法也就不能被实现,不能被重写;
加了final的抽象方法也不能被重写,这都与上面说的相违背!

好了,让我们来总结一下,抽象类和普通类的区别

  • 抽象类有abstract修饰,但普通类没有;
  • 抽象类不能创建对象,但普通类可以;
  • 抽象类可以(也可以没有)抽象方法,而普通类一定没有抽象方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不动声色的小蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值