java学习中一些疑惑解答(2)
(一)继承条件下构造方法的调用
以下面的源代码为例:
package ktdemo;
class Grandparent {
public Grandparent() {
System.out.println("GrandParent Created.");
}
public Grandparent(String string,String str) {
System.out.println("GrandParent Created.String:" + string + " "+ str);
}
}
class Parent extends Grandparent {
public Parent() {
super("已经调用","该方法");
System.out.println("Parent Created");
// super("Hello.Grandparent.");
}
}
class Child extends Parent { public Child() {
System.out.println("Child Created");
}
}
public class TestInherits {
public static void main(String args[]) {
Child c = new Child();
}
}
修改Parent构造方法的代码,在前面加一句调用super方法的语句,可以显示调用GrandParent的另一个有参的构造方法。
没加上super语句前运行截图:

加上super语句前运行截图:

从截图看说明通过可以super调用父类的有参和无参的构造方法
#而且必须是子类构造方法的第一个语句,因为构造方法的调用是先调用父类的构造方法,再调用子类的构造方法。
(二)为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来,为什么不能反过来?
(1) 构造函数是一种特殊的函数,主要用来创建对象时初始化对象,即为对象成员变量赋初值,它与new 运算符一起使用在创建对象的语句中;构造函数的主要功能用于在类的·创建时定义初始化状态
(2) 构造一个对象时,必须先调用其的构造函数,来初始化其成员变量和成员方法
(3) 子类拥有父类的成员变量和成员方法,子类继承了父类的各种属性,而构造方法则相当于把类给实例化出来,如果子类不调用父类的构造函数,则从父类继承而来的各种属性无法得到正确的初始化,不能反过来调用是因为父类根本不知道子类中有什么变量和方法,而且这样子类也得不到初始化的父类属性,程序会出错。
(三)方法覆盖要求子类与父类的方法一模一样,否则是方法重载,在子类中,若要调用父类中被覆盖的方法,可以使用super关键字,示例代码:
package demo;
class parent
{
public void show()
{
System.out.println("这是父类中的show方法");
}
}
class child extends parent
{
public void show()
{
super.show();
System.out.println("这是子类中的show方法");
}
}
public class test {
public static void main(String [] args)
{
child c = new child();
c.show();
}
运行截图:

结果分析:super方法在子类覆盖方法类使用,只有这样才能调用父类中被覆盖的方法,并且super语句放在子类覆盖方法第几句都行
java学习中一些疑惑解答(2)的更多相关文章
- Java 打印金字塔 or 打印带数字的金字塔 (Java 学习中的小记录)
Java 打印金字塔 or 打印带数字的金字塔 (Java 学习中的小记录) 作者:王可利(Star·星星) 效果图: 代码如下: class Star8 { public static void m ...
- Java 需要记得、了解的关键词 (Java 学习中的小记录)
Java 需要记得.了解的关键词 (Java 学习中的小记录) 作者:王可利(Star·星星) 总结:本次随笔,仅且拿来平时翻阅记忆用
- Java学习中,常用的命令管理(Java 学习中的小记录)
Java学习中,常用的命令管理 作者:王可利(Star·星星) 一.Window中常见的dos命令 在哪里操作dos命令: Win7 ---> 开始 ---->所有程序---& ...
- java学习中碰到的疑惑和解答(一)
今天写一个接口的时候发现,接口的方法不需要写修饰符,直接写数据类型加上方法名(参数)即可通过编译. import java.util.List; import com.bjm.pojo.Flower; ...
- JAVA学习中好网站 - -
http://www.54bk.com 我是博客 http://www.java-cn.com java中文网 http://java.sun.com sun官方网站 http://www.comej ...
- java学习中的一些疑惑解答
一.java中的枚举类型: 在实际编程中,往往存在着这样的"数据集",它们的数值在程序中是稳定的,而且"数据集"中的元素是有限的.例如星期一到星期日七个数据元素 ...
- java学习中碰到的疑惑和解答(二)
路径问题是一个在平时学习和开发碰到的常见问题,对于初学者是一个比较值得研究的东西.因此对路径问题进行总结. 1. 编写路径为了告诉编译器如何找到其他资源. 2. 路径分类: 相对路径:从当前资源出 ...
- JAVA学习中Swing概述中的JFrame学习
package com.swing; import java.awt.Color;import java.awt.Container;import java.awt.event.WindowAdapt ...
- JAVA学习中Swing部分JDialog对话框窗体的简单学习
package com.swing; import java.awt.Color;import java.awt.Container;import java.awt.event.ActionEvent ...
随机推荐
- iOS监听tableView组头切换事件
- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSIntege ...
- Myeclipse导包总是报错,jar包路径都没问题
是访问限制报错. 方法一: 全局属性Project>preferences>java>Compiler>Errors/Warnings>把右侧的[Deprecated a ...
- QuartZ2D __ 简单用法 1
一. 简单做一个画板 1. 建立一个UIView类 2. 在.m里建立一个延展 3. 分别定义一个起点, 一个终点的结构体属性 . 在建立一个存储路径的数组 @interface DrawView ( ...
- “div+css”下拉菜单
<style> html, body { margin: 0; padding: 0; } .btn-group{ font-size: 14px; position: relative; ...
- js中substr,substring,slice。截取字符串的区别
substr(n1,n2) n1:起始位置(可以为负数) n2:截取长度(不可以为0,不可以为负数,可以为空) 当n1为正数时,从字符串的n1下标处截取字符串(起始位置),长度为n2. 当n1为负数时 ...
- CNN初步-2
Pooling 为了解决convolved之后输出维度太大的问题 在convolved的特征基础上采用的不是相交的区域处理 http://www.wildml.com/2015/11/unde ...
- 【Java EE 学习 79 下】【动态SQL】【mybatis和spring的整合】
一.动态SQL 什么是动态SQL,就是在不同的条件下,sql语句不相同的意思,曾经在“酒店会员管理系统”中写过大量的多条件查询,那是在SSH的环境中,所以只能在代码中进行判断,以下是其中一个多条件查询 ...
- 网站跨站点脚本,Sql注入等攻击的处理
从360安全论坛里找到的一段代码,经过整理封装,直接在站点Global.asax文件或写一个HttpModule来拦截恶意请求即可: http://bbs.webscan.360.cn/forum.p ...
- Javascript实现的数组降维——维度不同,怎么谈恋爱
数组的元素可能是数组,这样一层层嵌套,可能得到一个嵌套很深的数组,数组降维要做的事就是把嵌套很深的数组展开,一般最后得到一个一维数组,其中的元素都是非数组元素,比如数组[1, [2, 3, [4, 5 ...
- SOUI与WTL
如果你想使用SOUI最好有点WTL基础,一点点就行了. SOUI不依赖于WTL,但是SOUI的编码风格基本和WTL一样的:SOUI抄袭了WTL的消息处理形式,SOUI的事件处理也是模仿了WTL的消息映 ...