抽象类

2015-03-20

Java

原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,

编译的时候是会默认加上去的。