问题描述:

  Java三大特性,封装、继承、多态,一直没搞懂其中多态是什么,最近研究了一下,关于父类和子类之间的调用。下面是一个测试类,源代码如下:

 package com.test;

 public class BaseClass {

     /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Father f = new Father();
f.sayHi();
Son s = new Son();
s.sayHi();
s.sayHello();
Father fs = new Son();
fs.sayHi();
//Son sf = (Son) new Father();
//sf.aa();
//sf.sayHi();
System.out.println("---------------------------");
System.out.println(f.getHeight());
System.out.println(s.getHeight());
System.out.println(fs.getHeight());
System.out.println(fs.getClass());
} } class Father { public int height;
Father(){
height = 5;
}
Father(int height){
this.height= height;
} public void sayHi(){
System.out.println("Hi,World!I'm Father.");
} public void aa(){
System.out.println("Hi,aa!I'm Father.");
} public int getHeight(){
return height;
}
} class Son extends Father { public void sayHello(){
System.out.println("Hello,World!I'm Son.");
} @Override
public void sayHi(){
System.out.println("Hi,World!I'm Son.");
}
}

输出结果:

 Hi,World!I'm Father.
Hi,World!I'm Son.
Hello,World!I'm Son.
Hi,World!I'm Son.
---------------------------
5
5
5
class com.test.Son

总结:

1.父类引用指向父类对象,子类引用指向子类对象,就是正常的类生成。

2.父类引用指向子类对象时,父类引用可以调用父类里定义的方法,比如sayHi();但是不能调用父类没用,子类有的方法,比如sayHello();会报The method sayHello() is undefined for the type Father错误。但是,父类引用指向子类对象时,调用的方法是子类的,也就是控制台输出的“Hi,World!I'm Son.”调用.getClass(),会打印"class com.test.Son"。

3.由于Son继承Father,所以所有的.getHeight();都是输出5.

4.子类对象指向父类引用的,需要强制转换成子类,见代码的注释地方,既可以调用父类方法,也可以调用子类方法,但是会报com.test.Father cannot be cast to com.test.Son异常。

Java特性之多态父类与子类之间的调用的更多相关文章

  1. Java 多态 父类和子类方法的访问控制权限

    Java 多态 父类和子类方法的访问控制权限 @author ixenos 父类和子类方法的访问控制权限 继承是为了扩展类的功能,而这种扩展显然就是对一个原始类的扩展,目的还是向上转型来调用,所以这就 ...

  2. this引用逃逸(使用内部类获取未外部类未初始化完的变量),多态父类使用子类未初始化完的变量

    1,this引用逃逸 并发编程实践中,this引用逃逸("this"escape)是指对象还没有构造完成,它的this引用就被发布出去了. 这是危及到线程安全的,因为其他线程有可能 ...

  3. Java多态性详解 (父类引用子类对象)

    面向对象编程有三个特征,即封装.继承和多态. 封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据. 继承是为了重用父类代码,同时为实现多态性作准备.那么什么是多 ...

  4. Java多态性详解——父类引用子类对象

    来源:http://blog.csdn.net/hikvision_java_gyh/article/details/8957456 面向对象编程有三个特征,即封装.继承和多态. 封装隐藏了类的内部实 ...

  5. Java中List的父类与子类如何转换?

    目录 定义 要点: 子类转父类 父类转子类 定义 A是B的子类,A比B多几条属性 要点: A是B的子类,但List<A>不是List<B>的子类.所以想直接转换是不行的. 子类 ...

  6. java基础:父类与子类之间变量和方法的调用

    1)父类构造函数 java中当调用某个类的构造方法的时候,系统总会调用父类的非静态初始化块进行初始化,这个调用是隐式的,而且父类的静态初始化代码 块总是会被执行,接着调用父类的一个或者多个构造器执行初 ...

  7. (转)java提高篇(四)-----理解java的三大特性之多态

    面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...

  8. 深入理解Java的三大特性之多态

    世界上最美丽的东西,看不见也摸不着,要靠心灵去感受. ——海伦·凯勒 面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响类使用的情况下改变类的内部结构,并保护数据.对 ...

  9. 理解java的三大特性之多态

    所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个 ...

随机推荐

  1. win10关机指示灯亮解决办法

    新上市的win10,大家都迫不及待的装上了,但是却遇到了很多问题. 对于win10关机指示灯亮的解决办法有下面几种. 指示灯 如果是只有电源的指示灯亮,拔掉电源即可. 如果是信号灯和其他的指示灯都亮原 ...

  2. MVC 数据验证

    MVC 数据验证 前一篇说了MVC数据验证的例子,这次来详细说说各种各样的验证注解.System.ComponentModel.DataAnnotations 一.基础特性 一.Required 必填 ...

  3. docker常用命令

    yum install wget -y wget -O etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7 ...

  4. maven/gradle 打包后自动上传到nexus仓库

    前提: nexus的相关repository必须设置允许redeploy,参考下图: maven项目: pom.xml中增加以下节点: <distributionManagement> & ...

  5. [LeetCode] Wiggle Sort 摆动排序

    Given an unsorted array nums, reorder it in-place such that nums[0] <= nums[1] >= nums[2] < ...

  6. [LeetCode] Paint House 粉刷房子

    There are a row of n houses, each house can be painted with one of the three colors: red, blue or gr ...

  7. CSS3常用属性(边框、背景、文本效果、2D转换、3D转换、过渡、有过渡效果大图轮播、动画)

    CSS3边框: 1.CSS3圆角:border-radius  属性--创建边框线的圆角 <body style="font-size:24px; color:#60F;"& ...

  8. jquery基本操作笔记

    来源于:http://www.cnblogs.com/webcome/p/5484005.html jq和js 可以共存,不能混用: 1 2 3 4 5 6 $('.box').css('backgr ...

  9. Android疑难杂症收集

    在渲染前获取 View 的宽高 5种手势工具类 软键盘用法总结 Android中Shape的使用 Android只能动态注册的广播Action Android 悬浮窗权限各机型各系统适配大全 录音权限 ...

  10. C#-WebForm-Session、Cookie-登录验证(未登录跳至登录界面)、隐藏地址栏传值

    Post 传值(看不见的传值) Get 传值(看得见的传值) Session - 全局变量组 存放位置:服务端 作用:只要里面有内容,那么这个网站中所有的C#端都能访问到这个变量 -- object类 ...