码迷,mamicode.com
首页 > 编程语言 > 详细

Java基础之抽象类和接口

时间:2015-03-17 17:34:39      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:

 

       抽象类就是包含abstract方法的类,抽象类可以包含非抽象方法,但抽象方法一定要定义在抽象类中,抽象类不可以实例化,抽象类里的抽象方法必须在具体的子类中实现。

具体抽象类代码进行分析:

public abstract class Animal {

//  抽象类里定义的抽象方法必须在具体子类中实现,所以抽象类里不能有抽象构造方法或者抽象静态方法
//  public abstract Animal(){
//      
//  }
//  public abstract static void sleep();
 
  public Animal(){
      
  }
  public String eye;  //普通成员变量
  public abstract void eat();   //abstract方法
  public void drink() {  //非抽象方法
      System.out.println("All Animal drink water!");
  }
}
abstract class CrawlAnimal extends Animal{   //如果父类中有子类未实现的方法,该类应定义为抽象类
  public abstract void jump();  
}
abstract class FlyAnimal extends Animal{
  public abstract void fly();
}

class Dog extends CrawlAnimal{ //抽象类是继承

  @Override
  public void jump() {
      System.out.println("Dog is jumping!");
      
  }

  @Override
  public void eat() {
      System.out.println("Dog eat bone");
      
  }
  @Override
  public void drink(){
      System.out.println("Dog drink milk");
  }
  
}
}

 

       接口就是抽象类的一个特例,接口中的所有方法都是抽象的。接口的成员变量默认为public static final类型,方法默认为public abstract类型。

具体接口代码如下:

public interface AnimalInterface {
    //接口不允许有构造方法
//    public AnimalInterface(){
//        
//    }
    public static final String eye ="black";//没有普通成员变量,不可修改的静态成员变量,需要初始化变量
    public abstract void eat();
    void sleep(); //默认public abstract
//    public static void jump(); 接口中不可以有静态方法
    
}
class CrawlAnimal2 implements AnimalInterface{ //接口是实现

    @Override
    public void eat() {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void sleep() {
        // TODO Auto-generated method stub
        
    }
    
}

       抽象类和接口的区别在于,

从构造方法,成员变量,方法,访问类型,静态方法和变量,继承性 语法方面的不同:

   1.抽象类可以有构造方法,接口中不能有构造方法。   

   2.抽象类中可以有普通成员变量,接口中没有普通成员变量

   3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。   

   4. 抽象类中的抽象方法的访问类型可以是public,protected,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。

   5. 抽象类中可以包含静态方法,接口中不能包含静态方法

   6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。

   7. 一个类可以实现多个接口,但只能继承一个抽象类。

两者在应用上的区别: 接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。而抽象类在代码实现方面发挥作用,可以实现代码的重用。

 

  本文为学习笔记,如有不当,请大家指出共同学习改正,谢谢。

Java基础之抽象类和接口

标签:

原文地址:http://www.cnblogs.com/xue-snowflakes/p/4344707.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!