多态介绍和总结,主板示例,Object 类

  1. /* 
  2. 多态介绍和总结,主板示例,Object 类 
  3. */  
  4.   
  5. 4.9 多态  
  6.     可以理解为事物存在的多种体现形态。  
  7.     1.多态的体现:父类引用指向了自己的子类对象。  
  8.                 父类的引用可以接收自己的本类对象。  
  9.     2.多态的前提:  
  10.         1.必须是类与类之间有关系,要么继承,要么实现。  
  11.         2.通常还有一个前提:存在覆盖。  
  12.     3.多态的好处  
  13.         多态的出现大大的提高了程序的扩展性。  
  14.         多态的bei端:提高了扩展性,但是只能使用父类的引用访问父类中的成员。  
  15.         强制将父类的引用。转成子类类型。向下转型。Cat c = (Cat)a;  
  16.         不可以将父类的对象转成子类类型。  
  17.         多态自始至终都是子类对象在做着变化。转换前先 a instanceof Cat 判断一下。  
  18.         a instanceof Cat :此处a 的实例是Cat吗?  
  19.     4.多态的应用  
  20.   
  21.     5.多态使用的注意事项(特点)  
  22.         1.在多态中成员函数的特点:  
  23.         在编译时期,参与引用型变量所属的类中是否有调用方法,有就通过,没有就编译失败。  
  24.         在运行时期,参阅对象所属的类中是否有调用的方法。  
  25.         简单总结:成员函数在多态调用时,。。。编译看左边,运行看右边。  
  26.         静态函数时,编译运行都看左边。  
  27.         在多态中成员变量无论编译和运行,都参阅左边。  
  28. //主板示例  
  29. interface PCI  
  30. {  
  31.     void close();  
  32.     void open();  
  33. }  
  34.   
  35. class MainBoard  
  36. {  
  37.     public void run(){  
  38.         System.out.println("mainboard run");  
  39.     }   
  40.   
  41.     public void usePCI(PCI p){  
  42.         if (p!=null)  
  43.         {  
  44.             p.open();  
  45.             p.close();  
  46.         }  
  47.     }  
  48. }  
  49.   
  50. class NetCard implements PCI  
  51. {  
  52.     public void open(){  
  53.         System.out.println("netcard run");  
  54.     }  
  55.     public void close(){  
  56.         System.out.println("netcard close");  
  57.     }  
  58. }  
  59.   
  60. class SoundCard implements PCI  
  61. {  
  62.     public void open(){  
  63.         System.out.println("soundcard run");  
  64.     }  
  65.     public void close(){  
  66.         System.out.println("soundcard close");  
  67.     }  
  68. }  
  69.   
  70. class DuoTaiDemo5  
  71. {  
  72.     public static void main(String[] args)  
  73.     {  
  74.         MainBoard mb = new MainBoard();  
  75.         mb.run();  
  76.         mb.usePCI(null);  
  77.         mb.usePCI(new NetCard());  
  78.         mb.usePCI(new SoundCard());  
  79.     }  
  80. }  
  81.   
  82. 需求:数据库的操作  
  83. 1.连接数据库。JDBC Hibernate  
  84. 2.操作数据库。  
  85.     c create r read u update d delete  
  86. 3.关闭数据库连接。  
  87. interface UserInfoDao  
  88. {  
  89.     public void add(User user);  
  90.     public void delete(User user);  
  91. }  
  92. class UseInfoByJDBC implements UserInfoDao  
  93. {  
  94.     public void add(User user)  
  95.     {  
  96.         1.JDBC连接数据库  
  97.         2.使用SQL添加语句添加数据  
  98.         3.关闭连接。  
  99.     }  
  100.     public void delete(User user)  
  101.     {  
  102.         1.JDBC连接数据库  
  103.         2.使用SQL删除语句删除数据  
  104.         3.关闭连接。  
  105.     }  
  106. }  
  107.   
  108. class UserInfoHibernate implements UserInfoDao  
  109. {  
  110.     public void add(User user)  
  111.     {  
  112.         1.Hibernate连接数据库  
  113.         2.使用SQL添加语句添加数据  
  114.         3.关闭连接。  
  115.     }  
  116.     public void delete(User user)  
  117.     {  
  118.         1.Hibernate连接数据库  
  119.         2.使用SQL删除语句删除数据  
  120.         3.关闭连接。  
  121.     }  
  122. }  
  123.   
  124. class DBOperate  
  125. {  
  126.     public static void main(String[] args)  
  127.     {  
  128.         //UserInfoByJDBC ui = new UserInfoByJDBC();  
  129.         //ui.add(user);  
  130.         //ui.delete(user);  
  131.         UserInfoDao ui = ;  
  132.         ui.add(user);  
  133.         ui.delete(user);  
  134.   
  135.     }  
  136. }  
  137.   
  138. Object 类 是java所有对象的上帝。每个类都使用object作为超类。  
  139.         该类中定义的是所有对象都具备的功能。  
  140.   
  141.         equals比较的是地址。  
  142.   
  143.         重写 object的equqls,要注意判断和转换动作  
  144.     `   public boolean equals(Object obj)  
  145.         {  
  146.             if (!(obj instanceof Demo))  
  147.             {  
  148.                 return false;  
  149.             }  
  150.             Demo d = (Demo)obj;  
  151.             return this.num == d.num;  
  152.         }  
  153.           
  154.     object 类的 toString()方法。  
  155.         默认显示 类名和哈希值。  
  156.   
  157.         一般要覆盖toString()方法。显示自己的内容  
  158.         public String toString(){  
  159.             return "demo:"+num;  
  160.         }  
多态是面向对象编程中的一个重要概念,它允许使用基指针或引用来调用派生的成员函数,实现动态绑定。通过多态,可以实现基于对象的型来确定要调用的成员函数,而不是变量的型。 下面是多态的定义和示例代码: 定义: 1. 多态是通过虚函数(virtual function)和基指针(或引用)来实现的。 2. 在基中,通过在成员函数声明前加上`virtual`关键字来声明虚函数。 3. 派生可以选择重写(覆盖)基的虚函数,以便提供自己的实现。 4. 使用基指针或引用来调用虚函数时,会根据对象的实际型来决定要调用的函数。 示例代码: ```cpp #include <iostream> class Shape { public: virtual void draw() { std::cout << "Drawing a shape." << std::endl; } }; class Circle : public Shape { public: void draw() override { std::cout << "Drawing a circle." << std::endl; } }; class Rectangle : public Shape { public: void draw() override { std::cout << "Drawing a rectangle." << std::endl; } }; int main() { Shape* shape1 = new Circle(); Shape* shape2 = new Rectangle(); shape1->draw(); // 调用派生Circle的draw函数 shape2->draw(); // 调用派生Rectangle的draw函数 delete shape1; delete shape2; return 0; } ``` 在上述示例中,我们定义了一个基`Shape`和两个派生`Circle`和`Rectangle`。基中声明了一个虚函数`draw()`,并在派生中进行了重写。 在`main()`函数中,我们创建了两个基指针`shape1`和`shape2`,分别指向派生`Circle`和`Rectangle`的对象。通过这些指针调用虚函数`draw()`时,会根据对象的实际型来决定要调用的函数。因此,`shape1->draw()`调用派生`Circle`的`draw()`函数,`shape2->draw()`调用派生`Rectangle`的`draw()`函数。 多态实现了运行时的动态绑定,使我们能够根据对象的实际型来执行相应的操作。这样可以增加代码的灵活性和可扩展性,使得程序更加易于维护和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值