JAVA继承时this和super关键字
JAVA继承时this和super关键字
本文主要讨论在方法前使用this或super关键字时,编译器在什么地方查找对应的函数。
- 在子类中指定this关键字。首先在本类中查找,如果本类中找不到,再在父类中查找。
class A
{
public void fun()
{
System.out.println("父类的fun()");
}
}
class B extends A
{
public void test()
{
this.fun();
}
public void fun()
{
System.out.println("子类中的fun()");
}
}
public class Hello
{
public static void main(String[] args) throws Exception
{
B b = new B();
b.test();
}
}
输出结果是子类中的fun。如果我们将子类中的该函数删去,那么调用的就是父类中的fun。
class A
{
public void fun()
{
System.out.println("父类的fun()");
}
}
class B extends A
{
public void test()
{
this.fun();
}
// public void fun()
// {
// System.out.println("子类中的fun()");
// }
}
public class Hello
{
public static void main(String[] args) throws Exception
{
B b = new B();
b.test();
}
}
输出父类中的fun
- 在子类中使用super,那么跳过子类查找直接从父类中查找
class A
{
public void fun()
{
System.out.println("父类的fun()");
}
}
class B extends A
{
public void test()
{
super.fun();
}
public void fun()
{
System.out.println("子类中的fun()");
}
}
public class Hello
{
public static void main(String[] args) throws Exception
{
B b = new B();
b.test();
}
}
输出父类中的fun
- 在父类中指定this关键字。和子类中指定this关键字一样,先从子类中找覆写的方法,如果找到,直接调用子类的该方法,如果没找到再从父类中寻找。
class A
{
public void test()
{
this.fun();
}
public void fun()
{
System.out.println("父类的fun()");
}
}
class B extends A
{
public void fun()
{
System.out.println("子类中的fun()");
}
}
public class Hello
{
public static void main(String[] args) throws Exception
{
B b = new B();
b.test();
}
}
输出子类中的fun
如果此时将子类中的fun删除
class A
{
public void test()
{
this.fun();
}
public void fun()
{
System.out.println("父类的fun()");
}
}
class B extends A
{
// public void fun()
// {
// System.out.println("子类中的fun()");
// }
}
public class Hello
{
public static void main(String[] args) throws Exception
{
B b = new B();
b.test();
}
}
输出父类中的fun
但此时有一点需要注意的是,如果修改父类的fun的访问权限为private,这时输出的就是父类中的fun
class A
{
public void test()
{
this.fun();
}
private void fun()
{
System.out.println("父类的fun()");
}
}
class B extends A
{
public void fun()
{
System.out.println("子类中的fun()");
}
}
public class Hello
{
public static void main(String[] args) throws Exception
{
B b = new B();
b.test();
}
}
JAVA继承时this和super关键字的更多相关文章
- java中关于类的封装与继承,this、super关键字的使用
原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/5454849.html. this关键字: this代表当前对象,它有以下几种用途: 1.本类 ...
- 乐字节Java继承|方法重写、super和final关键字
大家好,乐字节的小乐又来了,上一篇是:乐字节Java|JavaBean.继承与权限修饰,也是属于Java继承的,今天继续Java继承. 一. 方法的重写 父类不满足子类的要求,按需改写.注意 方法签名 ...
- java继承,final,super,Object类,toString,equals,
Java中的内部类:成员内部类静态内部类方法内部类匿名内部类 内部类的主要作用如下: 1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类 2. 内部类的方法可 ...
- 面向对象编程(四)继承,概念及super关键字,final关键字,Object类常见方法
继承 概念: ① 继承背后的思想就是基于已存在的类来构建新类; ② 当从已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求; ③ 当从其它类导出的类叫作子 ...
- Java继承时的初始化顺序
Java程序在启动和运行时,需要首先完成初始化的工作.在涉及到继承.static成员变量等因素时,初始化的顺序就复杂起来.下面以一个例子说明继承时的Java初始化顺序. 例子: class Insec ...
- Java基础系列--this、super关键字
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/8483623.html 一.概述 Java中this有两种用途,一种是用于指代当前对象,一种 ...
- Java基础之this和super关键字用法
this 在java中,this是一个引用当前类对象的引用变量,主要有以下几种用法: 引用当前类的实例变量· this关键字可以用来引用当前类的实例变量.如果实例变量和某个方法的参数之间存在歧义(实例 ...
- JAVA继承时构造函数的问题
今天看到java继承部分时,关于构造函数是否继承以及如何使用时遇到了点问题,后来查找相关资料解决了. 下面是我个人的总结: 先创建一个父类,里面有两个构造函数: public class Jisuan ...
- 详解 继承(下)—— super关键字 与 多态
接上篇博文--<详解 继承(上)-- 工具的抽象与分层> 废话不多说,进入正题: 本人在上篇"故弄玄虚",用super();解决了问题,这是为什么呢? 答曰:子类中所有 ...
随机推荐
- linux概念之IPC
一切皆文件,文件类型为普通,目录,管道,socket,链接,块设备,字符设备cd /proc/2305/fd/ 该进程打开了6个文件描述符,三个为字符设备即012,三个为socket即345,sock ...
- OpenJudge计算概论-简单算术表达式求值
/*===================================== 简单算术表达式求值 总时间限制: 1000ms 内存限制: 65536kB 描述 2位正整数的简单算术运算(只考虑整数运 ...
- mysqlbinlog快速遍历搜索记录 (转)
目标,开发人员说有个数据莫名其妙添加了,但是不知道是从哪里添加的,而且应用功能里面不应该添加这样的数据,为了查清楚来源,所 以我就准备去binlog里面找了,但是binlog有好几个月的数,我这样一个 ...
- JQueryMobile + PhoneGap 经验总结
1. pageinit & pageshow JQM的官方手册重点提醒了使用$(document).bind(‘pageinit’)代替$(document).ready(). 但当你需要对某 ...
- Debian安装记录
Fedora着实让我伤心透了.前天和昨天搞了整整两天Fedora 20的安装,午睡也没有,晚上就睡了四个小时不到,几乎尝试了所有Fedora 20的桌面版本,全部出问题了!就因为我的笔记本显卡是ATI ...
- 【jmeter】测试报告优化<二>
如果按JMeter默认设置,生成报告如下: 从上图可以看出,结果信息比较简单,对于运行成功的case,还可以将就用着.但对于跑失败的case,就只有一行assert错误信息.(信息量太少了,比较难找到 ...
- TCP segment of a reassembled PDU
Wireshark有时候会显示这个东东. 此处PDU是指上层(如HTTP)的Protocol Data Unit,意指上层协议的一个协议段太长,无法放入单个TCP数据包. 如果你在wireshark中 ...
- HDU2829
题目大意:给定一个长度为n的序列,至多将序列分成m+1段,每段序列都有权值,权值为序列内两个数两两相乘之和.m<=n<=1000. 分析:令w[i,j]表示区间[i,j]中两两乘积之和,f ...
- 71. Simplify Path
Given an absolute path for a file (Unix-style), simplify it. For example,path = "/home/", ...
- Java 中Timer和TimerTask 定时器和定时任务使用的例子
转自:http://blog.csdn.net/kalision/article/details/7692796 这两个类使用起来非常方便,可以完成我们对定时器的绝大多数需求 Timer类是用来执行任 ...