面试王牌 JAVA 多态只针对方法 不针对属性

子类是永远继承父类的非私有化方法,当子类中重写父类方法时,调用的是子类的方法,没有重写时,调用的是父类中的方法
1 多态是只针对方法,而不是属性的,但是写法上,子类重写父类的属性,编译器是不会报错的
class Person{
String name = "person" ;
public void shout(){
System.out.println(name);
}
}
class Stu extends Person{
String name = "student" ;
String school = "school" ;
}
public static void main(String[] args){
Person p = new Stu();
p.shout();
}
答案是Person
若是把main方法里的 Person p = new Stu() 改成 Stu s = new Stu()
s.shout()输入什么.
输出的也是Person,因为子类Stu并没有重写父类方法shout(),所以在调用shout方法的时候,
shout方法中引用的属性都将是super.属性。至于属性继承方面,确实是覆盖了,但是在父类的方法
中并未能引用到子类的属性。(子类中可以输出父类的方法,那是因为子类,没有重写父类的方法)
老师说子类继承父类之后 子类里就有父类非私有的所有属性和方法的一份拷贝
那我的p.shout()就是调用自己本身拷贝的方法.而不是父类的那个shout()方法 是这样吗?我把题目运行了 .结果发现 老师的话把我绕进去了.....谢谢大家的解答的 .
首先,不管你是Person p = new Stu(); 还是 Stu stu = new Stu(),
结果都是输出
父类的属性值
2 也是关于属性多态的
class Person{
String name = "person";
}
class Son extends Person {
String name = "son";
}
public class Test {
public static void main(String[] args){
Person p = new Son();
System.out.println(p.name);
}
}
结果为person。
为什么不是son?
变量是静态绑定,方法是动态绑定。静态绑定就是变量本身什么类型,就用哪个里面的。例如,你的p.name的p是Person类型,那么name就是Person类中的name。而如果是动态绑定,那么会从本身类型开始向超类型查找。如果name是方法,那么用于p是Son类的一个对象,所以会从Son开始找name方法,如果找不到再到父类中找
因为Person p = new Son();
就是把子类转型为父类
子类转型为父类的规则:
只能调用父类的属性
只能调用父类未被复写的方法
只能调用被子类复写的方
面试王牌 JAVA 多态只针对方法 不针对属性的更多相关文章
- 面试王牌 JAVA并发
Java 并发 JavathreadSocketC#C++ 并发 Table of Contents 1 什么是并发问题. 2多线程死锁问题 2 java中synchronized的用法 3 Java ...
- java 多态,和方法覆盖分析(转)
多态 (Polymorphism) 大家应该都不陌生,它是我们开发面向对象系统的“老朋友”了 .但是老朋友也会有“烦心”的时候啊,呵呵.有时候 不注意,还真会被它难到.譬如下面这个例子(thank H ...
- length()方法,length属性和size()的方法的区别
length()方法,length属性和size()的方法的区别: length()方法是针对字符串来说的,要求一个字符串的长度就要用到它的length()方法: length属性是针对Java中的数 ...
- 类与接口(五)java多态、方法重写、隐藏
一.Java多态性 面向对象的三大特性:封装.继承.多态. 多态的类型,分为以下两种: 编译时多态: 指的是 方法重载.编译时多态是在编译时确定调用处选择那个重载方法,所以也叫 静态多态,算不上真正的 ...
- Java 多态 父类和子类方法的访问控制权限
Java 多态 父类和子类方法的访问控制权限 @author ixenos 父类和子类方法的访问控制权限 继承是为了扩展类的功能,而这种扩展显然就是对一个原始类的扩展,目的还是向上转型来调用,所以这就 ...
- 一些Java中不为人知的特殊方法,学完后面试官可能都没你知道的多!
如果你用过反射并且执行过getDeclaredMethods方法的话,你可能会感到很吃惊.你会发现出现了很多源代码里没有的方法.如果你看一下这些方法的修饰符的话,可能会发现里面有些方法是volatil ...
- [Java面试二]Java基础知识精华部分.
一:java概述(快速浏览): 1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言,希望用于控制嵌入在有线电视交换盒.PDA等的微处理器: 1994年将Oak语言更名 ...
- 一份最贴近真实面试的Java基础面试题
这是一份Java基础知识的面试题.在网上的关于Java的面试题数不胜数,但认真看过感觉大多数都没有实用性,有很多是面试官根本就不会问到的,那些已经脱离了实际开发的技术问题.而这份资料来源自一份个人觉得 ...
- 一份贴近真实面试的Java面试题(基础部分)
这是一份关于Java基础的面试题.在网上的关于Java的面试题数不胜数,但本人认真看过后觉得大多数都没有实用性,有很多是面试官根本就不会问到的,企业根本不会用到的,一些已经脱离了实际开发的技术问题.而 ...
随机推荐
- unity3d 摄像机抖动特效
摄像机抖动特效 在须要的地方调用CameraShake.Shake()方法就能够
- [LeetCode] Contains Duplicate(II,III)
Contains Duplicate Given an array of integers, find if the array contains any duplicates. Your funct ...
- VC++如何折叠代码
工具-选项,然后在文本编辑器,C/C++中的格式设置,把大纲语句块设置为True 这样之后,还是不能像C#一样使用region折叠代码,但是可以方法和if语句都会自动显示可以折叠. 使用#pr ...
- LoadRunner系列之—-01 接口压力测试脚本
LoadRunner中一般用如下函数进行接口测试: <一>. http或soap协议下的get请求接口,样例如下: web_url("integrated_query.jsp&q ...
- JNI返回复杂对象之中的一个
需求: 首先说需求.近期接手一个项目.要在底层解析二进制数据,数据结构比較负责,因为server是c++server,加之開始没有考虑到移动端开发,所以协议有点扯蛋.大体是这种,一个数据包里面是map ...
- 嵌入式开发之dmva---基于DMVA2平台720P高清智能分析
http://wenku.baidu.com/view/2190746ba45177232f60a2b8.html
- [学习笔记]overthewire bandit 通关秘籍
1.第一关 使用putty等工具连入linux即可,注意port等设置. ls 列目录内文件: cat readme,显示文件内容,即可看到密码. 2.第二关 如何查看文件名为-的文件? cat ./ ...
- Lucene Core Solr
Apache Lucene - Welcome to Apache Lucene https://lucene.apache.org/ The Apache LuceneTM project deve ...
- Oracle用户、权限、角色管理学习(文字很系统)
Oracle用户.权限.角色管理 2009-03-16 13:20:50 标签:oracle 数据库 休闲 职场 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明 ...
- P3239 [HNOI2015]亚瑟王 期望dp
这个题一看就是期望dp,但是我有个问题,一个事件的期望等于他所有事件可能行乘权值的和吗...为什么我有天考试的时候就不对呢...求大佬解释一下. 至于这道题,f[i][j]代表前i个有j个发动技能,这 ...