java.两个例子充分阐述多态的可拓展性

  下面我将以两个例子来充分阐述java中多态的可拓展性,作为一名优秀的程序员,就必须了解程序的可拓展性,非常利于程序后续的开发。

第一个例子:利用电脑的主板来作为例子,就我们所熟悉的电脑的主板,里面是不是有很多模块,网卡,声卡,想要用到这些功能,只能当主板运行起来,再给网卡和声卡供电就可以,但这用软件语言怎么来实现呢?是不是先要主板跑起来,主板再让声卡或者网卡跑起来,但这样做,拓展性不高让声卡和网卡跑起来的操作是重复的,而且有很多模块也具备这样的功能,就单纯让主板上的模块跑起来,这是其一,万一,那一天,技术更新,新的模块出现了,是不是又要创建模块的对象,然后又跑起来,这显然是不利于开发的,但是针对这一个问题,主板的厂商和声卡,网卡的厂商商量后,以后就用一个PCI接口来连接主板和模块,彻底解决了更新不能用或者重复使用的问题,而这恰恰对应了我们的java中的多态,利用多态,我们能大大提高程序的可拓展性!具体代码如下!

/*
需求:
电脑运行实例,
电脑运行基于主板。
*/

interface PCI
{
    public void open();
    public void close();
}

class MainBoard
{
    public void run()
    {
        System.out.println("mainboard run ");
    }
    public void usePCI(PCI p)//PCI p = new NetCard()//接口型引用指向自己的子类对象。
    {
        if(p!=null)
        {
            p.open();
            p.close();
            
        }
    }
}

class NetCard implements PCI
{
    public void open()
    {
        System.out.println("netcard open");
    }
    public void close()
    {
        System.out.println("netcard close");
        method();
    }
    
}
class SoundCard implements PCI
{
    public void open()
    {
        System.out.println("SoundCard open");
    }
    public void close()
    {
        System.out.println("SoundCard close");
    }
}
/*
class MainBoard
{
    public void run()
    {
        System.out.println("mainboard run");
    }
    public void useNetCard(NetCard c)
    {
        c.open();
        c.close();
    }
}

class NetCard
{
    public void open()
    {
        System.out.println("netcard open");
    }
    public void close()
    {
        System.out.println("netcard close");
    }
}
*/

class DuoTaiDemo5
{
    public static void main(String[] args)
    {
        MainBoard mb = new MainBoard();
        mb.run();
        mb.usePCI(null);
        mb.usePCI(new NetCard());
        mb.usePCI(new SoundCard());
        
    }
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  第二个例子:利用常用数据库来解释多态,就我们熟知的数据库而言,目前有两种数据库的连接模式:JDBC和Hibernatelian连接,使用数据库,都有两个必不可少的操作,连接和关闭,这时候,使用接口,把这两种操作封装起来,需要使用那种连接模式直接更换类名就可以了!具体代码如下!

/*
需求:数据库的操作。
数据是:用户信息。
1,连接数据库。JDBC  Hibernate
2,操作数据库。
    c create r read  u update  d delete
3,关闭数据库连接。
*/

interface UserInfoDao
{
    public void add(User user);

public void delete(User user);
}

class UserInfoByJDBC implements UserInofDao
{

public void add(User user)
    {
        1,JDBC连接数据库。;
        2,使用sql添加语句添加数据。;
        3,关闭连接。
    }
    public void delete(User user)
    {
        1,JDBC连接数据库。;
        2,使用sql添加语句删除数据。;
        3,关闭连接。
    }
}

class UserInfoByHibernate implements UserInfoDao
{
    public void add(User user)
    {
        1,Hibernate连接数据库。;
        2,使用sql添加语句添加数据。;
        3,关闭连接。
    }
    public void delete(User user)
    {
        1,Hibernate连接数据库。;
        2,使用sql添加语句删除数据。;
        3,关闭连接。
    }
}

class  DBOperate
{
    public static void main(String[] args)
    {
        //UserInfoByJDBC ui = new UserInfoByJDBC();
//        UserInfoByHibernate ui = new UserInfoByHibernate();
        UserInfoDao ui = new UserInfoByHibernate();
        ui.add(user);
        ui.delete(user);
    }
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

总结:

1.这两个例子都使用了接口来抽象出一些重复的操作,为了让不同的模块能直接快捷地使用这些操作,直接使用多态的向上转型(看我之前的博客),能后用父类引用去调用,反正之后无论是技术更新而有了新的模块或者更换已有模块,我们都可以使用父类的引用去直接调用它们共同的操作!

2.不一定用接口,也可以使用抽象类,但是,使用接口,可拓展性更高,以后有更新,可以直接改动接口,不用去改动抽象类,其次,使用接口,能够被多继承!这也是方便的地方。

时间: 2024-10-10 13:49:01

java.两个例子充分阐述多态的可拓展性的相关文章

如何处理Java异常的两个例子?

下面有两个例子.一个是告诉我们调用方法也需要处理被调用者所抛出的异常:另一个是告诉我们父类可以被用来捕获或者处理异常. 1.调用方法必须处理被调用者所抛出的异常 下面是一个小小处理异常的程序.仅仅只是为了测试,如果在一个方法里抛出一个异常,不仅仅那个方法,而且调用该方法的所有方法必须声明或抛出该异常. public class exceptionTest { private static Exception exception; public static void main(String[]

(1) 深入理解Java面向对象三大特性 封装 继承 多态

转眼已经工作快6年了,最开始做了2年J2EE:然后整了2年的数据仓库,主要是Cognos的报表开发:现在从事4G LTE核心网的开发,用的语言任然是Java,但写代码的机会不多,基本都是看代码找BUG,偶尔做点new feature也是在比较成熟的框架上复制.粘贴.修改,大部分时间还是在理解业务,钱多.事少.离家近,当时来这家公司图的是后面2点,2年过去了,英文水平有所提升,对敏捷开放也有一定的了解,但技术方面明显退步了或者说没有进步吧,本来以前也不怎么好,因为工作上用不到,自己也没怎么学习,所

JAVA之旅(八)——多态的体现,前提,好处,应用,转型,instanceof,多态中成员变量的特点,多态的案例

JAVA之旅(八)--多态的体现,前提,好处,应用,转型,instanceof,多态中成员变量的特点,多态的案例 学习是不能停止的 一.多态 我们今天又要学习一个新的概念了,就是多态,它是面向对象的第三个特征,何谓多态? 定义 某一类事物的多种存在方式 比如 动物中的猫狗,人类中的男人,女人 我们可以把多态理解为事物存在的多种体现形态 当我们new一个猫类的时候,和new 一个动物,其实是一样的,多种形态变现 所以我们可以分这几部分分析 多态的体现 多态的前提 3.多态的好处 4.多态的应用 我

七:Java之封装、抽象、多态和继承

本文章介绍了关于Java中的面向对象封装.抽象.继承.多态特点 Java面向对象主要有四大特性:封装.抽象.继承和多态. 一.封装 封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成"类",其中数据和函数都是类的成员. 在面向对象语言中,封装特性是由类来体现的,我们将现实生活中的一类实体定义成类,其中包括属性和行为(在Java中就是方法),就好像人类,可以具有name,sex,age等属性,同时也具有eat(),sle

Java基础——封装、继承、多态

Java基础--封装.继承.多态 --小实例快速成长 抽象: 1.目的:将复杂的东西简单化,将繁乱的内容有序化. 2.过程:对相同.相似的东西合而为一,对不同的内容进行归门别类. 3.结果:类.接口. 封装: 1.目的:化零为整,将零散的内容进行归属,进行权限控制. 2.过程:将某对象的属性.方法(功能)统一到其名下,并分别设置.适当的权限进行控制管理. 3.结果:对象,接口. 继承: 1.求大同存小异:在一个系列内,大部分都有的内容,就划归父类:子类将父类的内容继承过来,可以有自身的一些发展和

java 两个数交换问题

大家其实知道可以用异或来实现交换  学过C的人看如上的程序  一看以为肯定交换了 但是注意 C对表达式的计算顺序和Java是不同的  java是从左往右的  所以不对 简单修改就可以了: 交换连个数的方法 一.使用中间量  (这个就不多说了) 二.使用异或(如上) 三.使用加减法 这个不需要解释吧 java 两个数交换问题,布布扣,bubuko.com

java反射小例子

package com.txwsqk.reflect; public class Car { private String brand; private String color; private int maxspeed; public Car(){} public Car(String brand, String color, int maxspeed){ this.brand = brand; this.color = color; this.maxspeed = maxspeed; }

解决Linux终端乱码的两则例子

现象描述 我们先来说一下出现乱码的原因. 例子 先举个实际的例子,我们一般通过ssh远程到服务器上进行操作.当在终端上执行一些有输出的任务时,就遇到乱码了. 比如,我登陆上oracle数据库服务器上,查看oracle RAC的状态: 比如上面的例子,除了英文字母外其它的都成了乱码了. 当然这个与运行什么程序没有什么关系,你可以试一下系统自带的命令,当参数错误时也会也现乱码. 当我们在网上找问题的解决方法时,有让你修改配置文件的,有让你修改环境变量的,有让你换个客户端的,还有让你装语言包的. 有这

编写Spark的WordCount程序并提交到集群运行[含scala和java两个版本]

编写Spark的WordCount程序并提交到集群运行[含scala和java两个版本] 1. 开发环境 Jdk 1.7.0_72 Maven 3.2.1 Scala 2.10.6 Spark 1.6.2 Hadoop 2.6.4 IntelliJ IDEA 2016.1.1 2. 创建项目1) 新建Maven项目 2) 在pom文件中导入依赖pom.xml文件内容如下: <?xml version="1.0" encoding="UTF-8"?> &l