Java学习之多态(Polymorphism)
多态==晚绑定
不要把函数重载理解为多态。
因为多态是一种运行期的行为,不是编译期的行为。
多态:父类型的引用可以指向子类型的对象。
比如 Parent p = new Child();
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;
如果有,再去调用子类的该同名方法。
(注意此处,静态static方法属于特殊情况,静态方法只能继承,不能重写Override,如果子类中定义了同名同形式的静态方法,它对父类方法只起到隐藏的作用。调用的时候用谁的引用,则调用谁的版本。)
如果想要调用子类中有而父类中没有的方法,需要进行强制类型转换,如上面的例子中,将p转换为子类Child类型的引用。
因为当用父类的引用指向子类的对象,用父类引用调用方法时,找不到父类中不存在的方法。这时候需要进行向下的类型转换,将父类引用转换为子类引用。
package cn.logan.Poly;
public class Animal {
    public void sing(){
        System.out.println("Animal is singsing!");
    }
}
package cn.logan.Poly;
public class Cat extends Animal {
    public void sing(){
        System.out.println("Cat is singing!");
    }
    public void eat(){
        System.out.println("Cat is eating!");
    }
}
package cn.logan.Poly;
public class Dog extends Animal {
    public void sing(){
        System.out.println("Dog is singing!");
    }
}
package cn.logan.Poly;
public class PolyTest {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Cat cat = new Cat();
        Animal animal = cat;
        animal.sing();
        Animal a = new Cat();
        Cat c = (Cat) a;
        c.sing();
        c.eat();
        //编译错误
        //用父类引用调用父类不存在的方法
        //Animal a1 = new Cat();
        //a1.eat();
        //编译错误
        //向下类型转换时只能转向指向的对象类型
        //Animal a2 = new Cat();
        //Cat c2 = (Dog)a2;
    }
}
Java学习之多态(Polymorphism)的更多相关文章
- Java学习之 多态 Polymorphism
		
转自:http://www.cnblogs.com/mengdd/archive/2012/12/25/2832288.html 多态的概念 多态==晚绑定. 不要把函数重载理解为多态. 因为多态是一 ...
 - java面向对象之 多态 Polymorphism
		
多态(Polymorphism):用我们通俗易懂的话来说就是子类就是父类(猫是动物,学生也是人),因此多态的意思就是:父类型的引用可以指向子类的对象. 1.多态的含义:一种类型,呈现出多种状态 主要讨 ...
 - Java学习笔记——多态性Polymorphism
		
Java中实现多态的机制 Java中实现多态的机制靠的是父类或者接口定义的引用变量可以指向子类或者具体的实现类的实例对象,而程序调的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就 ...
 - Java学习之多态
		
多态的概念 多态==晚绑定. 不要把函数重载理解为多态. 因为多态是一种运行期的行为,不是编译期的行为. 多态:父类型的引用可以指向子类型的对象. 比如 Parent p = new Child(); ...
 - java学习(二)多态中成员变量详解
		
今天我总结了一下java多态中成员变量的赋值与调用 举一个我当初做过的小案例: class Fu{ int num; void show(){} } class Zi extends Fu{ //in ...
 - [Java学习]面向对象-多态
		
多态 多态发生条件 发生在有继承关系的类型中. 向上转型(自动类型转换)与向下转型(强制类型转换) //向上转型 //编译阶段a1被编译器看作是Animal类型,所以a1引用绑定的是Animal类中的 ...
 - JAVA学习:多态
		
多态:可以理解为事物存在的多种体现形态. 人:男人,女人 动物:猫,狗. 猫 x = new 猫(); 动物 x = new 猫() 1,多态的体现 父类的引用指向了自己的子类对象. 父类的引 ...
 - java学习笔记 --- 多态
		
一.多态 (1)定义:同一个对象在不同时刻体现出来的不同状态.父类的引用或者接口的引用指向了自己的子类对象. Dog d = new Dog();//Dog对象的类型是Dog类型. Animal ...
 - Java学习之多态---类成员变化
		
类成员 一.成员变量 编译时:变量(f)所属类(Fu)中是否有成员变量,有:编译成功,没有:编译失败 运行时:变量(f)所属类(Fu)中是否有成员变量,运行该类(Fu)中的成员变量 class Fu ...
 
随机推荐
- Linux 上通过rpm安装mysql
			
安装mysql之前要remove掉系统自带的mysql: rpm -qa | grep "MySQL*" 和rpm -qa | grep mysql 要确保卸载干净 rpm ...
 - spring boot项目启动报(No session repository could be auto-configured, check your configuration (session store type is 'null'))
			
找到项目的application配置文件,增加 spring.session.store-type=none,重新启动问题解决 注:因为项目未使用redis管理session,可以如上设置,如果想使用 ...
 - node路由访问,中间件返回数据
			
node路由访问,中间件返回数据 定义一个变量存放json数据,中间件接受数据 var responseData; router.use(function(req, res, next) { resp ...
 - 利用create-react-app从零开始搭建React移动端环境
			
一 开始 1 全局安装脚手架 npm install -g create-react-app 这有个坑,就是在window下安装一直会报错,报错信息如下: 解决办法:在开始菜单栏里打开cmd的时,右击 ...
 - Linux课程---6、别名管理和网络配置(Linux命令如何记)
			
Linux课程---6.别名管理和网络配置(Linux命令如何记) 一.总结 一句话总结: 理解记忆:因为命令要实现那么多功能,必须有那么多参数,而不同的参数就适用不用的情况 命令基本格式:命令关键字 ...
 - 英语发音规则---th
			
英语发音规则---th 一.总结 一句话总结: th发/ð/音的情况:a.在th后以字母-er结尾的单词中:b.在代词.冠词.介词.连词或副词中的字母组合th th发/θ/音的情况:a.在数词(包括基 ...
 - 快速构建hibernate框架
			
手动配置Hibernate框架的配置,极易出现问题,在Eclipse的web项目中,我们可以快速配置,方便快捷 一.导入Hibernate框架所需要的jar文件 二. 窗口—Perspective—打 ...
 - linux命令学习笔记(9):touch 命令
			
linux的touch命令不常用,一般在使用make的时候可能会用到,用来修改文件时间戳,或者新建一个不存在的文件. .命令格式: touch [选项]... 文件... .命令参数: -a 或--t ...
 - PS色调— —通道混合
			
clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Processing\PS Algorithm'); Image=im ...
 - 用Rem来无脑还原Web移动端自适应的页面
			
(function (win,doc){ if (!win.addEventListener) return; var html=document.documentElement; function ...