zoukankan      html  css  js  c++  java
  • 面向对象三大特征之多态

    面向对象的三大特征:封装、继承、多态。今天重点来看一下“多态”。

    一、封装

        指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。将属性或方法进行封装,防止外部程序随机访问,加强代码的安全性。

    1 //属性的封装
    2 private String name;
    3 private int age;
    4 
    5 //方法的封装
    6 private int say(){
    7     System.out.println("你好。");
    8     return 1;
    9 }

    二、继承

        子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

        子类继承父类,使用extends关键字。

        子类可以访问父类那些属性和方法?

    private 本类      
    默认省略(default) 本类 同包    
    protected 本类 同包 非同包子类  
    public 本类 同包

    非同包子类

    其他任何包都可用

    1 //类的继承格式
    2 
    3 class 父类  {
    4 
    5 }
    6 
    7 class  子类  extends  父类{
    8 
    9 }

    三、多态

    终于进入到今天的重点了!

        多态是同一种事物,由于条件的不同,展示出不同的结果。

        在程序中多态就是同一种引用类型,由于使用不同的对象实例,而执行不同地操作。

        例如:猫吃鱼,狗啃骨头。不是多态;

                   在动物界,有的小动物吃鱼,有的小动物啃骨头。就是多态。

       多态的优点:

          1. 消除类型之间的耦合关系

          2. 可替换性

          3. 可扩充性

       4.  接口性

          5.  灵活性

          6. 简化性

     实现多态的条件:

         ① 子类继承父类;

         ② 子类重写父类方法;

         ③ 父类引用指向子类对象。保证了同一个父类引用类型,使用不同的子类对象实例,而执行不同的操作。

     1 /**
     2  * 乐器(Instrument)类包括:钢琴(Piano)类、小提琴(Violin)类;
     3  * 乐器类必须是抽象类,其中要有抽象方法(保证子类重写父类方法)
     4  * 各种乐器的弹奏( play )方法各不相同
     5  * 演奏家来演奏乐器
     6  */
     7 
     8 
     9 //乐器类
    10 public abstract class Instrument {  //抽象类
    11     public abstract void play();  //抽象方法,子类必须重写父类对象
    12 }
    13 
    14 //钢琴类
    15 public class Piano extends Instrument{  //继承父类
    16     public void play(){   //重写方法
    17         System.out.println("弹奏钢琴");  //钢琴弹奏方法
    18     }
    19 }
    20 
    21 //小提琴类
    22 public class Violin extends Instrument{  //继承父类
    23     public void play(){  //重写方法
    24         System.out.println("演奏小提琴");  //小提琴弹奏方法
    25     }
    26 }
    27 
    28 //演奏家类
    29 public class Artist {
    30     public void make(Instrument i){  //传入“乐器”参数,哪个乐器调用哪个方法
    31         System.out.println("演奏家:"+name);
    32         i.play();
    33     }
    34 }
    35 
    36 //Test类
    37 public class Test {
    38     public static void main(String[] args) {
    39         Artist a=new Artist("xxx");  //父类引用指向子类对象
    40         //相当于Instrument i = new Piano() ;实例化一个子类对象,i存的是一个地址。
    41         a.make(new Piano());  //传进的对象不同,可调用一样的方法,结果不同。以 Piano 对象调用“演奏家类”中的 make 方法。
    42         a.make(new Violin());
    43     }
    44 }    

    执行以上程序,输出结果为:

     

  • 相关阅读:
    (转)十分钟搞定CSS选择器
    (转)我所理解的OOP——UML六种关系
    闲话:你今天OO了吗?
    oledb方式读取excel文件
    (转)asp.net 高质量缩略图
    (转载)重温SQL——行转列,列转行
    第九讲,资源表解析
    第八讲,TLS表(线程局部存储)
    第七讲,重定位表
    第六讲,导出表
  • 原文地址:https://www.cnblogs.com/yanglianwei/p/8732857.html
Copyright © 2011-2022 走看看