/* 
什么情况用抽象类呢? 
  当我们描述一类事物的时候,发现该类事物确实存在着某种行为,但是这种 
  行为有时不具体的,这时我们就可以抽取这种行为的声明,但是不去现实 
  这一种行为,我们称之为抽象行为,我们要用到抽象类 
抽象类要注意的事项 
  1.如果一个函数不存在方法体,那么必须要用abstract修饰符来修饰成抽象方法! 
  2.如果一个类里面存在抽象方法的话,那么该类也必须使用abstract! 
  3.如果一个非抽象类继承了一个抽象类,那么该类必须实现该类 
  所继承的抽象类的所有方法! 
  4.抽象类里面可以存在抽象的方法和非抽象的方法! 
  5.抽象类里面可以没有抽象方法 
  6.抽象方法是不能实例化的,因为抽象方法是很有可能存在抽象方法,如果你 
  让抽象方法创建实例,用实例去调用抽象方法是没有任何意义的 
  7.抽象类是有构造函数的,此构造方法是给子类创建对象时初始化父类的属性的 
抽象类不能与那些关键字组合修饰呢? 
   不能与priavte          
       --因为抽象方法需要子类重写的,但是却被private修饰这样会自相矛盾 
   不能与static  
           --因为如果可以用static修饰,则可以利用类名.抽象函数,但是这样 
           是毫无意义的 
        不能与final  
           --因为抽象方法需要子类重写的,但是却被fianal修饰这样会自相矛盾 
*/ 
 
 
class ChouXiang { 
        public static void main(String[] args) { 
                Animal animal=new Animal();//错误: Animal是抽象的; 无法实例化(注意6) 
                System.out.println("Hello World!"); 
        } 
} 
// Animal不是抽象的(注意2) 
 abstract class Animal { 
        // 错误: 缺少方法主体, 或声明抽象(注意1) 
        //public abstract  void eat();(注意5)注释这个抽象方法,程序并没报错 
 
        //(注意6) 
        public Animal(){ 
 
        } 
 
 
        //抽象类里的非抽象方法(注意4) 
        public void pao(){ 
                System.out.println("动物在跑"); 
        } 
} 
//错误: dog不是抽象的, 并且未覆盖Animal中的抽象方法eat()(注意3) 
class dog extends Animal { 
        public   void eat(){ 
                System.out.println("狗在吃"); 
        } 
} |   
        
 
    
    
    
     
 
 |