原CSDN博客已弃用,文章会逐渐迁移过来。
转帖请注明本文出自weimeig的博客(http://blog.csdn.net/weimeig/article/details/79498536),请尊重他人的辛勤劳动成果,谢谢
应朋友们反馈的JAVA基础薄弱的问题,决定出一套完整的JAVA基础教程,帮助大家复习,巩固JAVA基础,今天要讲的是抽象类。
/**
*abstract是一个修饰符
*可以修饰方法,类
*1.当我们多个类存在相同的功能时,但是功能的主体不同,这时我们进行向上抽取
*只抽取功能的定义不抽取功能的主体
*
* 抽象类的特点:
* 1.抽象方法一定要在抽象类中
* 2.抽象类和抽象方法必须要被abstract关键字修饰
* 3.抽象的类是不能被创建对象,因为调用抽象的方法没意义
* 4.抽象类中的方法要被使用,必须由之类重写抽象类中的方法,然后创建之类对象来调用。
* 5.抽象类中可以定义非抽象的方法,有时我们需要此类不能被new关键字创建对象时,
* 可以用abstract将此类变成抽象类
* 6.子类如果只重写一部分的抽象方法,那么该子类还是一个抽象类。如果抽象类的方法
* 要被使用,子类必须重写抽象类中的所有方法。
*
* 值得注意:抽象类和普通的类没有太大的不同。
* 1.抽象类无法通过new关键字创建对象
* 2.抽象类里面可以有抽象的方法
*/
abstract class Animal{
abstract void sing();
void show(){
System.out.println("你好");
}
}
class Cat extends Animal{
void sing(){
System.out.println("喵喵唱歌");
}
}
class Dog extends Animal{
void sing(){
System.out.println("汪汪唱歌");
}
}
public class chouxianglei {
public static void main(String[] args)
{
Animal a=new Dog();//Animal是抽象类不能new对象,但可以接收子类对象
a.sing();
}
}
我们不难发现,不同的子类继承父类后,各自有不同的重写需求,那么父类中的方法突然变得没有了意义,这时候,我们可以将父类Animal中的
void show(){
System.out.println("你好");
}
方法改为看不懂的抽象方法,abstract void sing();此时会报错,因为,抽象方法需要存在抽象类中,
所以,将类定义为abstract class Animal抽象类。当然,方法体中的abstract void sing()不加abstract,
编译的时候是会默认加上去的。