java学习笔记-多态

个人对多态的一点理解,不一定完全正确,欢迎大家批评指正。

1.什么是多态

面向对象的三大特性:封装,继承,多态。从某种程度来说,多态是建立在封装和继承的继承之上的。

多态性可以理解为同一个事物的多种表现形态。

    1)方法的重载与重写

      2)子类对象的多态性:父类的引用指向子类对象(更多的是指这种形式)

               父类 f = new 子类();

2.子类对象的多态性使用要求:

1)要有类的继承

    2)要有子类对父类方法的重写

    3)父类的引用指向资料对象

3.属性没有多态性

下面用一个简单的例子来掩饰一下:

 1 //父类
 2 public class Person {
 3     public void eat(){
 4         System.out.println("人吃饭");
 5     }
 6     public void walk(){
 7         System.out.println("人走路");
 8     }
 9 }
10 //子类Man
11 public class Man extends Person {
12     public void eat(){
13         System.out.println("男人吃饭");
14     }
15     public void walk(){
16         System.out.println("男人走路");
17     }
18     public void sleep(){
19         System.out.println("睡觉");
20     }
21 }
22 //子类Woman
23 public class Woman extends Person {
24     public void eat(){
25         System.out.println("女人吃饭");
26     }
27     public void walk(){
28         System.out.println("女人走路");
29     }
30     public void shopping(){
31         System.out.println("购物");
32     }
33 }
34 //测试类
35 public class Test{
36     public static void main(String[] args) {
37         //父类的引用指向子类对象
38         Person p = new Man();//向上转型 即将子类型转换为父类型
39         //虚拟方法调用:通过父类的引用指向子类对象实体,调用方法是执行的是子类重写父类的方法
40         p.eat();//男人吃饭
41         p.walk();//男人走路
42         //p.sleep(); //错误 用父类引用调用了父类不存在的方法
43         Man m = (Man)p;//向下转型 即将父类型转换为子类型,必须强制转换,并且父类型的引用必须指向子类的对象,即指向谁才能转换成谁。
44         m.sleep();//睡觉
45
46        Person p1 = new Woman();
47        //java.lang.ClassCastException
48        //向下转型时,只能转向指向的对象类型
49        //Man m1 = (Man)p1;
50          Woman w = (Woman)p1;
51     }
52 }    

通过上面的例子我们可以发现,如果想要调用父类没有的方法,而子类独有的方法时,需要进行强制类型转换。如上面将p强制转换m。

并且转换的时候只能转向指向的对象类型,如p1只能向下转型为Women m1,而不能转型为Man类型

4.使用多态的好处

1)提高了程序的扩展性和维护性

2)具有很强的灵活性

3)简化了代码编写和修改过程

时间: 2024-10-12 20:16:08

java学习笔记-多态的相关文章

Java学习笔记—多态

1.什么是多态 多态是同一个行为具有多个不同表现形式或形态的能力. 多态性是对象多种表现形式的体现. 现实中,比如我们按下 F1 键这个动作: 如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档: 如果当前在 Word 下弹出的就是 Word 帮助: 在 Windows 下弹出的就是 Windows 帮助和支持. 同一个事件发生在不同的对象上会产生不同的结果. 2.多态存在的三个必要条件 继承 重写 父类引用指向子类对象(Parent p = new Child()) 当使用多态方式

Java学习笔记心得——初识Java

初识Java 拿到这本厚厚的<Java学习笔记>,翻开目录:Java平台概论.从JDK到TDE.认识对象.封装.继承与多态...看着这些似懂非懂的术语名词,心里怀着些好奇与担忧,就这样我开始走进Java的世界.  Java产生的历史 Java来自于Sun公司的一个叫Green Project中撰写的程序语言,全球信息网(World Wide Web)兴起,Java Applet成为网页互动技术的代表,特别适合于Internet应用程序开发. Java语言的特点 1.面向对象 这是Java最重要

java学习笔记(三)java中的修饰符abstract、static与final

一.四种访问级别的访问范围 访问级别 访问修饰符 同类 同包 子类 不同的包 公开 public 受保护 protected 默认 没有访问修饰符 私有的 private 二.使用abstract修饰符需要遵守的语法规则 1.抽象类中可以没有抽象方法,但是包含抽象方法的类必须定义为抽象类,即用abstract修饰: 2.抽象类跟抽象方法不能被final修饰符修饰: 3.抽象类中可以有非抽象方法,因为继承抽象类的子类必须重写父类中所有的抽象方法,因此抽象类中不能有抽象构造方法和抽象静态方法: 4.

Java 学习笔记(2015.7.13~17)

Java 学习笔记(2015.7.13~17) Java this关键字 表示本类中的属性,调用本类中的方法 class Person {        private String name;         private int age;         public Person(String name, int age) {         this.name = name;//调用本类中的属性         this.age = age;//同上} //get&set方法:    

非专业码农 JAVA学习笔记 3 抽象、封装和类(2)

(2).静态域-放在内存公共存储单元,不放在特定的对象,用static修饰 (续上一篇<非专业码农 JAVA学习笔记 3 抽象.封装和类(1)>...) (3).静态初始器-由static引导的一对大括号括起来的语句组,作用跟构造函数相似 (4).最终域-final引导的,值在整个过程都不发生改变的 5.方法 (1)方法的定义:修饰词1 修饰词2…返回值类型 方法名(参数) throw[异常列表] 这里个人经验就是注意定义了返回值的方法,要在方法体里面增加return 该类型变量:此外遇到if

Java学习笔记_26_泛型概述

                                                               泛型概述 在Java中存入容器中的对象再取出时需要转换类型,因为对象加入容器会被转换成Object类型,而取出时要转换成实际类型.但向  下类型转换都 是存在潜在危险的,因此应该尽量避免它们.  Java的泛型: 所谓泛型就是在定义(类.方法.形参.成员变量等等)的时候,指 定它们为通用类型,也就是数据类型可以是任意类型. 泛型为提高大型程序的类型安全和维护带来了很大的潜

Java学习笔记&lt;3&gt;面向对象相关

面向对象的基本思想 从现实世界客观存在的事务出发来构造软件系统,并在系统的构造中尽可能运用人类的自然思维方式,如抽象.分类 继承.聚合.多态等. 类和对象的关系 对象中存储了类规定的数据类型,并且对象可以调用类的方法. java面向对象 <1>对象是java程序的核心,一切皆对象. <2>对象可以看成静态属性(成员变量)和动态属性(方法)的封装体. <3>类是创新同一类型对象的模版,定义了该类型对象应具有的成员变量及方法. 类的定义 成员变量可以用java语言的任何一种

java学习笔记 5

随手 看到了这篇关于Java到底哪里出了问题的文章,笑傻了23333 “Java developers just can’t help themselves it seems - give em an inch, and next thing you know you’re looking at a OO hierarchy 15 layers deep and instantiating a hammer hammer factory.” 继承 Java中的继承用extends,所有的继承都是

Java学习笔记之方法重载,动态方法调度和抽象类

一.方法重载 如果子类中的方法与它的超类中的方法有相同的方法名,则称子类中的方法重载超类中的方法,特别是当超类和子类中的方法名和参数类型都相同时,在子类中调用该方法时,超类中的方法会被隐藏.考虑下面程序: 1 class A 2 { 3 int i, j; 4 A(int a, int b) 5 { 6 i = a; 7 j = b; 8 } 9 10 // display i and j 11 void show() 12 { 13 System.out.println("i and j: &