• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
火磷
Memory will fade,but not notes.
博客园    首页    新随笔    联系   管理    订阅  订阅
Java 抽象类和接口

一.抽象类

1.定义

抽象类指提供方法,但是未提供方法体(实现方法)的类,抽象类用来被子类继承,子类通过方法的重写实现抽象方法。

注:1)抽象类中不一定包含抽象类,它可能只是abstract修饰的类;包含抽象方法的类一定是抽象类。

      2)抽象类一旦被继承,子类需要实现所有的抽象方法,否则子类也要用abstract修饰.

      3)抽象类不能实例化,但是可以在创建抽象类的同时,提供抽象方法的实现。

      4)抽象类可以拥有自己的成员变量及成员方法。

2.格式

抽象类:[public] + abstract +类名

抽象方法:[public] /protected +类型+方法名称();

注:abstract不能修饰私有方法,静态方法和构造方法。

3.理解

在面向对象的过程中,类可以描述对象,但是有些类并不提供具体的方法(足够的信息)来描述具体的对象。比如有对象new Animal(),对象是什么动物,怎么叫,什么样子,我们并不知道,需要在子类(Cat,Dog)中提供具体的数据。总的来说,抽象类是对事物的抽象。

 4.实例

public abstract class Animal {
     int i=0;                          //如果为静态变量则直接调用,非静态变量创建对象(实例化的同时要重写抽象方法)后调用。
     abstract void shout();     //构造抽象方法
 }

public class Cat extends Animal{

    public void shout() {                           //子类重写抽抽象方法

    System.out.println("猫叫:喵喵...");    

    }
     public static void main(String[] args) {
            Animal a1 = new Cat();   //抽象类在实例化的时候,引用指向子类,子类不是抽象类;不会报错;如果子类在上面不重写抽象方法,这里将会报错,即子类为抽象类。   
            a1.shout();
            a1.i=2;

            Animal a2 = new Animal(){                //抽象类实例化的同时重写抽象方法。
            void shout() {
                 System.out.println("喵");    
                 }
            };
            a2.shout();
            a2.i=3;        
    }
}

 

二.接口

1.定义

接口可以说是一种更加彻底的抽象类,它是对行为特性进行抽象,它只有常量和抽象方法。

2.格式

2.1创建接口

interface + 接口名称{

常量:[public static final]+ 类型 + 常量名称=?; (需要给常量初始化)

抽象方法:[public abstract] + 类型 + 方法名称();

}

2.2接口的使用

子类 + implements + 接口名称1,2,3..{}

注:一个子类可使用多个接口。

3.实例

以飞机为例,所有的飞机都有起飞,着陆功能:

1 abstract class Plane{
2     abstract void launch();
3     abstract void land();
4 }
5 //或者
6 interface Plane{
7      void launch();
8      void land();
9 }

然而一些飞机(战斗机Battleplane)具有开火(fire)功能,实现方法如下:

1.在抽象类Plane中添加开火功能:abstract void fire();或者在接口Plane中添加开火功能:void fire();

2.新建一个抽象类Fire并添加开火功能

1 abstract class Fire{
2     abstract void fire();
3 
4   }

3.新建一个接口Fire冰添加开火功能

1 interface Fire{
2     void fire();
3 
4   }

筛选:1.子类battleplane可以继承该抽象类或者实现该接口,但是其他子类(客机之类)不适用,舍弃;2.子类Battleplane不能同时继承两个父类,舍弃;3.子类Battleplane继承父类Plane,并且实现接口Fire,其他子类(客机之类的)可以继承该抽像类,没有开火功能,则不实现该接口。

具体代码如下:

 1 public class Battleplane extends Plane implenments Fire{
 2 
 3             public void launch(){
 4                     System.out.println("起飞“);
 5              }
 6 
 7             public void land(){
 8                     System.out.println("着陆”);
 9              }
10 
11              public void fire(){
12                      System.out.println("开火“);
13               }
14 
15           public static void main(String args[]){
16                    Battleplane bp=new Battleplane();
17                           bp.launch();
18                           bp.land();
19                           bp.fire();
20              }      
21 }        

 

!!!

                     

 

posted on 2015-07-30 14:41  火磷  阅读(282)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3