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

我们都知道在多态中子类要重写父类的方法,执行时也执行子类中的方法,这就显得父类中的方法体有点子虚乌有了,
也就是说可以直接省略方法体,而只定义一个方法就可以了。因此,我们称一个没有方法体的方法为抽象方法
而当一个“类”中有抽象方法时,则该类为抽象类(即要加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修饰,但普通类没有;
  • 抽象类不能创建对象,但普通类可以;
  • 抽象类可以(也可以没有)抽象方法,而普通类一定没有抽象方法
发布了34 篇原创文章 · 获赞 8 · 访问量 707

猜你喜欢

转载自blog.csdn.net/weixin_45720626/article/details/105044478