Java学习笔记之多态

1.父类型的引用可以指向子类型的对象:

  Parent p = new Child();

2.当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的该同名方法。

3.静态static方法属于特殊情况,静态方法只能继承,不能重写Override,如果子类中定义了同名同形式的静态方法,它对父类方法只起到隐藏的作用。调用的时候用谁的引用,则调用谁的版本。

4.使用多态,只能使用重写父类的方法,若方法只在父类定义而没有重写,调用的是父类的方法。

5.如果想要调用子类中有而父类中没有的方法,需要进行强制类型转换,如上面的例子中,将p转换为子类Child类型的引用。

6.向上类型转换(Upcast):将子类型转换为父类型,不需要显示指定,即不需要加上前面的小括号和父类类型名。

7.向下类型转换(Downcast):将父类型转换为子类型;对于向下的类型转换,必须要显式指定,即必须要使用强制类型转换。并且父类型的引用必须指向子类的对象,即指向谁才能转换成谁。

9.示例:

 1 public class PolyTest
 2 {
 3     public static void main(String[] args)
 4     {
 5
 6         //向上类型转换
 7         Cat cat = new Cat();
 8         Animal animal = cat;
 9         animal.sing();
10
11
12         //向下类型转换
13         Animal a = new Cat();
14         Cat c = (Cat)a;
15         c.sing();
16         c.eat();
17
18
19         //编译错误
20         //用父类引用调用父类不存在的方法
21         //Animal a1 = new Cat();
22         //a1.eat();
23
24         //编译错误
25         //向下类型转换时只能转向指向的对象类型
26         //Animal a2 = new Cat();
27         //Cat c2 = (Dog)a2;
28
29
30
31     }
32 }
33 class Animal
34 {
35     public void sing()
36     {
37         System.out.println("Animal is singing!");
38     }
39 }
40 class Dog extends Animal
41 {
42     public void sing()
43     {
44         System.out.println("Dog is singing!");
45     }
46 }
47 class Cat extends Animal
48 {
49     public void sing()
50     {
51         System.out.println("Cat is singing!");
52     }
53     public void eat()
54     {
55         System.out.println("Cat is eating!");
56     }
57 }

时间: 2024-10-12 08:36:23

Java学习笔记之多态的相关文章

Java学习笔记4——多态

多态 1.引用多态:1)父类的引用可以指向本类的对象:2)父类的引用可以指向子类的对象 public static void main(String[] args) {         Animal obj1 = new Animal(); //父类的对象指向本类         Animal obj2 = new Dog(); //父类的引用可以指向子类的对象         //Dog obj3 = new Animal(); 不可以使用子类的引用指向父类  } 2.方法多态   1)创建本

Thinking in java学习笔记之多态

多态是一种将改变的事物和未变的事物分离开来的重要技术.

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,所有的继承都是