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

网友投稿 190 2023-07-14


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 implemhttp://ents 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();

// Uhttp://serInfoByHibernate ui = new UserInfoByHibernate();

UserInfoDao ui = new UserInfoByHibernate();

ui.add(user);

ui.delete(user);

}

}

总结:

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

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java异常处理的简单练习
下一篇:JDBC数据源连接池配置及应用
相关文章

 发表评论

暂时没有评论,来抢沙发吧~