抽象类

/*
 * 抽象类
 * 抽象:笼统、模糊、看不懂、不具体;
 * 
 * 特点:
 * 1、方法只有声明没有实现时,该方法就是抽象方法,需要被关键字abstract修饰 ;
 * 2、抽象方法必须在抽象类中,该类必须也被abstract修饰;
 * 3、抽象类不可以被实例化(不可以new),因为调用抽象方法没意义;
 * 4、抽象类的子类必须覆盖该抽象类的所有抽象方法后,该子类才可以实例化,否则,该子类必须定义成抽象类;
 * 
 * 问:抽象类中有构造函数吗?
 * 答:有,用于给子类对象进行初始化。
 * 
 * 问:抽象类可以不定义抽象方法吗?
 * 答:可以,但是很少见,目的就是不让该类创建对象,AWT的适配器对象就是这种类,
 *     通常这个类中的方法有方法体,但是却没有内容;
 * 
 * 问:抽象关键字不可以和哪些关键字共存?
 * 答:private不可以,因为抽象方法必须被子类覆盖,不能被父类私有化
 *     static不可以,因为如果成员变静态,就不需要对象,没对象,抽象类就是废物;
 *     final不可以,因为抽象方法必须被子类覆盖,final表示此方法不能被覆盖;
 * 
 * 问:抽象类和一般类的区别?
 * 答:相同点:
 *         抽象类和一般类都是用来描述事物的,都在内部定义了成员;
 *             不同点:
 *         1、一般类有足够的信息描述事物;抽象类描述事物的信息有可能不足;
 *         2、一般类中不能定义抽象方法,只能定义非抽象方法;抽象类中可以定义抽象方法,同时也可以定义非抽象方法;
 *         3、    一般类可以被实例化;抽象类不可能被实例化;
 * 
 * 问:抽象类一定是个父类吗?
 * 答:是的,因为需要子类覆盖其方法后才可以对子类实例化;
 */

public class AbstractDemo {

    /**
     * @param args
     */
    public static void main(String[] args) {
        狗1 dog = new 狗1();
        dog.吼叫();        
        dog.行走();
        dog.吃();
        
        狼 Wolf= new 狼();
        Wolf.吼叫();        
        Wolf.行走();        
    }
}

abstract class 犬科{
    abstract void 吼叫();
    abstract void 行走();
}

//抽象类可以没有抽象方法
abstract class Demo{
    void show(){
        
    }
}

abstract classextends 犬科{    
    void 吼叫(){
        System.out.println("狗旺旺");
    }
}

class 狗1 extends 犬科{
    void 吼叫(){
        System.out.println("狗1旺旺");
    }
    
    void 行走(){
        System.out.println("狗1行走");
    }
    
    void 吃(){
        System.out.println("狗1吃");
    }
}

classextends 犬科{
    void 吼叫(){
        System.out.println("狼嗷嗷");
    }    
    
    void 行走(){
        System.out.println("狼行走");
    }
}
posted @ 2012-07-12 16:55  jxgxy1  阅读(150)  评论(0编辑  收藏  举报