面向对象三大特征之多态

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

一、封装

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

 

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 }    

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

 

 

posted @ 2018-04-07 22:29  杨。。  阅读(334)  评论(0编辑  收藏  举报