`
hcjdiy
  • 浏览: 5705 次
  • 性别: Icon_minigender_1
  • 来自: 南昌
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

抽象类与接口的应用(三)

阅读更多

设计模式-->代理设计

范例:代理操作

interface Network{                             //定义Network接口

       public void browse();                   //定义浏览的抽象方法

}

class Real implements Network{          //真实的上网操作

       public void browse(){                  //覆写抽象方法

              System.out.println("上网浏览信息");

       }

}

class Proxy implements Network{              //代理上网

       private Network network;

       public Proxy(Network network){  //设置代理的真实操作

              this.network = network;        //设置代理的子类

       }

       public void check(){                    //与具体上网相关的操作

              System.out.println("检查用户是否合法");

       }

       public void browse(){

              this.check();                        //可以同时调用多个与具体业务相关的操作

              this.network.browse();         //调用真实的上网操作

       }

}

public class ProxyDemo{

       public static void main(String args[]){

              Network net = null;                     //定义接口对象

              net = new Proxy(new Real()); //实例化代理,同时传入代理的真实操作

              net.browse();                       //客户只关心上网浏览一个功能

              }

}

设置模式-->适配器设计

范例:适配器设计实现

interface Window{                      //定义Window接口,表示窗口操作

       public void open();               //窗口打开

       public void close();        //窗口关闭

       public void activated();   //窗口活动

       public void iconified();   //窗口最小化

       public void deiconified();       //窗口恢复大小

}

//定义抽象类实现接口,在此类中覆写方法,但是所有的方法体为空

abstract class WindowAdapter implements Window{

       public void open(){}                    //覆写open()方法,方法体为空

       public void close(){}                   //覆写close()方法,方法体为空

       public void activated(){}              //覆写activated()方法,方法体为空

       public void iconified(){}        //覆写iconified()方法,方法体为空

       public void deiconified(){}           //覆写deiconified()方法,方法体为空

}

//子类直接继承WindowAdapter类,有选择地实现需要的方法

class WindowImpl extends WindowAdapter{

       public void open(){                      //真正实现open()方法

              System.out.println("窗口打开");  

       }

       public void close(){                     //真正实现close()方法

              System.out.println("窗口关闭");

       }

}

public class AdapterDemo{

       public static void main(String args[]){

              Window win = new WindowImpl();     //实现接口对象

              win.open();                                        //调用open()方法

              win.close();                                //调用close()方法

       }

}

 

//适配器设计

内部类的扩展

范例:在一个抽象类中包含接口

abstract class A{                         //定义抽象A

       public abstract void printA();        //定义抽象方法

       interface B{                                       //定义内部接口

              public void printB();                     //定义抽象方法

       }

}

class X extends A{                                    //继承抽象类

       public void printA(){                           //实现抽象方法

              System.out.println("Hello --> A");

       }

       class Y implements B{                        //定义内部类实现内部接口

              public void printB(){                    //实现内部接口的抽象方法

                     System.out.println("Hello -->B");

              }

       }

}

public class InnerExtDemo01{

       public static void main(String args[]){

              A.B b = new X().new Y();            //实例化内部接口对象

              b.printB();                                         //调用内部接口的抽象方法

       }

}

范例:在一个接口中包含抽象类

interface A{                         //定义接口A

       public abstract void printA();        //定义抽象方法

       abstract class B{                                       //定义内部抽象类

              public      abstract void printB();                  //定义抽象方法

       }

}

class X implements A{                                      //实现接口的抽象类

       public void printA(){                           //实现抽象方法

              System.out.println("Hello --> A");

       }

       class Y extends       B{                        //在接口实现类中接口

              public void printB(){                    //实现内部接口的抽象方法

                     System.out.println("Hello -->B");

              }

       }

}

public class InnerExtDemo02{

       public static void main(String args[]){

              A.B b = new X().new Y();            //实例化内部接口对象

              b.printB();                                         //调用内部接口的抽象方法

       }

}

抽象类与接口之间的关系

序号

区别点

抽象类

接口

1

定义

包含一个抽象方法的类

抽象方法和全局常量的集合

2

组成

构造方法、抽象方法、普通方法、常量、变量

常量、抽象方法

3

使用

子类继承抽象类(extends)

子类实现接口 (implements)

4

关系

抽象类可以实现多个接口

接口不能继承抽象类,但允许继承多个接口

5

常见设计模式

模板设计

工厂设计、代理设计

6

对象

都通过对象的多态性产生实例化对象

7

局限

抽象类有单继承的局限

接口没有此局限

8

实际

作为一个模板

作为一个标准或表示一种能力

9

选择

如果抽象类和接口都可以使用,则优先使用接口,避免单继承的局限

10

特殊

一个抽象类中可以包含多个接口,一个接口中可以包含多个抽象类

 

总结:

1、  抽象类和接口的实例化:通过对象多态性

2、  抽象类表示一个模板,接口制定的是一个标准

3、  常见的设计模式:模板设计,工厂设计、代理设计,适配器设计

分享到:
评论

相关推荐

    java 抽象类与接口的练习

    在Java编程语言中,抽象类和接口是两种重要的面向对象设计...通过这样的练习,你可以更好地理解和掌握Java中的抽象类与接口,以及它们在实际开发中的应用。在实践中不断尝试和调试,将有助于深化对这两个概念的理解。

    Java抽象类与接口实验报告

    Java抽象类与接口实验报告

    Java继承_抽象类与接口的应用.

    1.继承及继承实例 2.方法重写(Overwrite) 3.super关键字 4.方法重载(Overload) 5.final修饰符 6.abstract修饰符 7.抽象类 8.接口 9.接口和抽象类对比 10.接口和抽象类使用场合实例 11.总结

    java抽象类与接口区别

    #### 三、抽象类与接口的主要区别 ##### 1. 继承与实现 - **抽象类**:一个类可以继承一个抽象类,实现单继承。 - **接口**:一个类可以实现多个接口,实现多继承的效果。 ##### 2. 方法的实现 - **抽象类**:可以...

    第7章 抽象类与接口.ppt

    在Java编程语言中,抽象类和接口是两种重要的机制,用于实现代码的抽象和多态性。本章主要探讨了这两个概念以及它们在实际编程中的应用。 首先,抽象类(abstract class)是一种不能被实例化的类,它通常含有至少一...

    JAVA中抽象类与接口的区别

    在Java编程语言中,抽象类(Abstract Class)与接口(Interface)是实现抽象与多态性的两种关键机制。这两种机制的出现,极大地丰富了Java语言的面向对象特性,并为开发者提供了更为灵活的设计选择。下面将从多个...

    抽象类与接口的区别

    #### 三、抽象类与接口的应用场景对比 1. **多重继承**: - **抽象类**:不支持多重继承,一个子类只能继承一个抽象类。 - **接口**:支持多重继承,一个类可以实现多个接口。 2. **方法的实现**: - **抽象类*...

    实验5:Java抽象类与接口.doc

    通过本实验,学生将掌握 Java 中的抽象类和接口的概念及其应用,并了解如何使用抽象类和接口来描述不同的业务逻辑。 四、实验讨论 在本实验中,我们使用抽象类和接口来描述不同的雇员类型,并演示了如何使用这些类...

    java 抽象类与接口的区别

    在Java编程语言中,抽象类和接口是两种重要的面向对象设计概念,它们都用于实现多态性,但各自具有不同的特点和应用场景。了解并熟练掌握它们的区别对于编写高质量的Java代码至关重要。 首先,抽象类是一种不能被...

    C#抽象类与接口方法

    【C#抽象类与接口方法】在C#编程语言中,抽象类和接口是两种用于实现多态性和封装的关键概念,它们允许我们设计灵活、可扩展的代码结构。 抽象类是一种特殊的类,它不能被实例化,而是作为其他类的基类使用。抽象类...

    详细解析Java中抽象类和接口的区别

    #### 抽象类与接口的基本概念 1. **抽象类**:抽象类是一种不能被实例化的类,它可以包含抽象方法(没有实现的方法)和具体方法(有实现的方法)。抽象类的主要目的是为子类提供一种共有的基本结构,子类必须实现...

    JAVA 继承基本类、抽象类、接口区别与联系

    ### JAVA继承基本类、抽象类、接口的区别与联系 #### 一、概述 在Java语言中,类(Class)的设计是面向对象编程的核心之一。Java提供了三种方式来扩展类的功能:基本类、抽象类和接口。这三者之间既有相似之处,也...

    C#类、接口、虚方法和抽象方法-抽象类和接口的相同点和区别

    这里我们将详细讨论这些概念以及抽象类与接口之间的相同点和区别。 首先,让我们来看看抽象类(Abstract Class): 1. 抽象方法是只有声明没有实现的方法,可以视为没有方法体的虚方法。例如: ```csharp public ...

    c# 中抽象类和接口的学习

    在实际开发中,选择使用抽象类还是接口取决于你的具体需求。如果你需要共享一些通用的实现逻辑,或者需要强制派生类遵循某种结构,那么抽象类可能是更好的选择。相反,如果你的目标是提供一组操作的契约,让多个类...

    教学视频-抽象类&接口

    5. **接口与抽象类的区别**:对比两者在使用上的差异,包括继承的数量限制(一个类只能继承一个抽象类,但可以实现多个接口)和成员类型(抽象类可有实例变量,接口则没有)。 6. **适配器模式**:可能会介绍如何...

    抽象类和接口 区别分析

    在面向对象编程中,抽象类与接口都是实现代码复用和提高软件模块化的重要工具。它们各自拥有独特的特性和应用场景,掌握这些概念对于编写高质量、可维护性强的代码至关重要。下面我们将深入探讨抽象类和接口之间的...

    抽象类和接口

    与抽象类不同,一个类可以实现多个接口,从而表现出多种行为。在Java中,使用`interface`关键字定义接口。在实验中,我们创建了一个`Soundable`接口,它定义了`makeSound()`和`adjustVolume()`这两个方法,表示声音...

    C#中抽象类和接口的区别.txt

    ### C#中抽象类与接口的区别 在C#编程语言中,抽象类和接口都是用于实现面向对象编程中多态特性的关键概念。它们都旨在为其他类提供一种定义行为和特性的模板或规范,但它们之间存在着重要的区别。本文将详细探讨C#...

    基于Java抽象类和接口实现疯狂动物城

    本实验手册即根据需求模拟完成一个简易的疯狂动物城游戏系统, 平台的全称为:使用抽象类和接口实现疯狂动物城项目(后简称为: crazyZoo) 。该系统的主要功能包括:查看动物城成员、入驻动物城、修改动物信息、查找疯狂...

    dot Net中抽象类与接口的区别

    在.NET框架中,抽象类与接口是两种不同的编程概念,它们都扮演着实现多态性和代码重用的关键角色。尽管它们在某些方面有相似之处,但各自的特性决定了它们在实际应用中不同的适用场景。本文将深入探讨.NET中抽象类与...

Global site tag (gtag.js) - Google Analytics