面向对象的三大特征:封装、继承、多态。今天重点来看一下“多态”。
封装
指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。将属性或方法进行封装,防止外部程序随机访问,加强代码的安全性。
继承
子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
子类继承父类,使用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 }
执行以上程序,输出结果为:
原文地址:https://www.cnblogs.com/yanglianwei/p/8732857.html
时间: 2024-10-06 06:58:49