Java学习笔记----多态
2017-05-11 20:55
169 查看
多态是指一个程序中同名的不同方法共存的情况。在Java中,常见的有三种多态形式:方法重载实现的多态;方法覆盖实现的多态;引用类型变量实现的多态。这里主要讲引用类型实现的多态。
多态在程序中的体现:父类或者接口的引用指向或者接收自己的子类对象。
好处和作用:多态的存在提高了程序的可扩展性和后期可维护性。
多态的前提:需要存在继承或者实现关系;要有覆盖操作。
通俗地可理解为:成员变量是资产,成员方法是行为,是瞬时的,所以方法是可以覆盖的,而属性的值各是各的。(类中的方法可以覆盖,成员变量不能覆盖)。
由结果可知,在多态中,shout()方法因为重写被覆盖了,但是name属性却没有。
问题:在这种情况写如何才能访问到父类的成员变量呢?见如下代码:
结果:无色
这就实现了对父类成员变量的访问。
例:动物中的猫狗: 猫这个对象对应的类型是猫类型,即 猫 x=new 猫(); 同时猫也是动物中的一种,也可以把猫称为动物,即 动物 y=new 猫(); 动物是猫和狗具体事物中抽取出来的父类型。 因此,多态的核心思想:父类型引用指向子类对象。
多态在程序中的体现:父类或者接口的引用指向或者接收自己的子类对象。
好处和作用:多态的存在提高了程序的可扩展性和后期可维护性。
多态的前提:需要存在继承或者实现关系;要有覆盖操作。
多态的特点: 成员函数:编译时,要查看**引用变量所属的类中**是否有所调用的成员。 运行时,要查看***对象所属的类中***是否有所调用的成员。 成员变量:只看引用变量所属的类。
通俗地可理解为:成员变量是资产,成员方法是行为,是瞬时的,所以方法是可以覆盖的,而属性的值各是各的。(类中的方法可以覆盖,成员变量不能覆盖)。
class PolyDemo1{ public static void main(String[] args){ Jing8 jing8=new Jing8(); jing8.shout(); System.out.println(jing8.name); Dog d1=jing8; //多态 d1.shout(); System.out.println(d1.name); } } abstract class Animal{ abstract void shout(); } class Dog extends Animal{ public string name="小白"; public void shout(){ System.out.println("汪汪!"); } } class Jing8 extends Dog{ public string name="大黄"; public void shout(){ //对父类的方法进行重写 System.out.println("汪....汪....汪....."); } }
执行结果: 汪....汪....汪..... 大黄 汪....汪....汪..... 小白
由结果可知,在多态中,shout()方法因为重写被覆盖了,但是name属性却没有。
问题:在这种情况写如何才能访问到父类的成员变量呢?见如下代码:
class PolyDemo2{ public static void main(String[] args){ Car c=new Benz(); //多态 System.out.println(c.getColor()); } } class Car{ private String color = "无色"; public void setColor(String color){ this.color=color; } public String getColor(){ return color; } } class Benz extends Car{ private String color = "黑色"; public void setColor(String color){ //重写方法时,可以调用父类的成员,但要注意成员的可见性。 super.setColor(color); } public String getColor(){ return super.getColor(); //这里利用super调用了父类的getColor方法,所以返回的应该是父类的颜色。注意:这里不能用super(),因为这是构造函数的调用;也不能用super.color,因为color在父类中是私有成员,不能访问。 } }
结果:无色
这就实现了对父类成员变量的访问。
相关文章推荐
- java学习笔记十二——多态
- Java 编程思想(第四版)学习笔记(8)多态
- java学习笔记---浅谈java多态的注意要点
- Java菜鸟学习笔记--面向对象篇(十八):对象转型&多态
- 黑马程序员—5—Java基础:多态学习笔记和学习心得体会
- JAVA学习笔记(五)继承时的构造方法、多态、接口、汉诺塔
- JAVA学习笔记之七继承和多态
- 黑马程序员-------java学习笔记之继承与多态
- Java菜鸟学习笔记--面向对象篇(十八):对象转型&多态
- 【学习笔记】JAva编程思想之多态
- Java_SE_学习笔记_①——Java多态——向上转型的意义
- Java学习笔记---类的继承与多态特性
- 黑马程序员-java多态学习笔记
- Java学习笔记——多态
- 学习Java.对于继承和多态的随堂笔记
- 黑马程序员:java学习笔记-接口和多态
- Java学习笔记之六——Java类的继承和多态(1)
- Java学习笔记之六——Java类的继承和多态(2)
- java学习笔记_多态应用
- 黑马程序员--Java学习笔记之面向对象思想(多态、内部类、匿名内部类、异常类)