知识点;
1、生成子类的过程
2、使用super调用父类构造函数的方法

首先编写3个文件。

Person.java

class Person{
String name;
int age;
Person(){
System.out.println("None");
}
Person(String name,int age){
this.name = name;
this.age = age; System.out.println("Name: " + this.name + " Age:" +this.age);
} void eat(){
System.out.println("eating");
}
}

  

Student.java:

class Student extends Person{
Student(){
System.out.println("i am students!");
}
}

  

Test.java:

public class Test{
public static void main(String[] args){
Student li = new Student();
}
}

  

编译运行结果是:

PS C:\Users\admin\Desktop\java_code\练习六> javac .\Test.java
PS C:\Users\admin\Desktop\java_code\练习六> java Test
None
i am students!

  

为什么运行的结果是这样呢?

在子类的构造函数当中,必须调用父类的构造函数。
如果没有的话,编译器会自动加上super,super会调用父类的构造函数:

super();

那为什么要"在子类的构造函数当中,必须调用父类的构造函数"?

可以减少重复代码。

请看下面的例子:

Person.java:

class Person{
String name;
int age;
Person(){
System.out.println("None");
}
Person(String name,int age){
this.name = name;
this.age = age; } void eat(){
System.out.println("eating");
}
}

  

如果按照以前的方式写,代码会是这样的,可以发现Stduent和Person类中有重复的代码。

Student.java:

class Student extends Person{
int grade;
Student(){
System.out.println("i am students!");
}
Student(String name,int age,int grade){
this.name = name;
this.age = age;
this.grade = grade; }
}

  

修改后Student.java:

class Student extends Person{
int grade;
Student(){
System.out.println("i am students!");
}
Student(String name,int age,int grade){
super(name,age);
this.grade = grade; }
}

  

Test.java:

public class Test{
public static void main(String[] args){
Student li = new Student("liming",18,90);
System.out.println(li.name);
System.out.println(li.age);
System.out.println(li.grade);
}
}

  

编译后输出:

PS C:\Users\admin\Desktop\java_code\练习六> java Test
liming
18
90

  

因此super与this调用构造函数类似,this()为空的时候调用同类无参数的构造函数,因此super会调用父类无参数的构造函数。

  • this()调用本类当中的构造函数
  • this. 调用本类中的成员变量
  • super() 调用父类当中的构造函数
  • super. 调用父类中的成员变量

java基础(七)之子类实例化的更多相关文章

  1. Java基础七-正则表达式

    Java基础七-正则表达式 一.定义: 特定的符号的组合 二.作用: 用于操作字符串数据 三.优缺点 简化代码,但是阅读性差 四.引入 4.1 问题 判断一个号码是否是QQ号? 不是零开头 6-15位 ...

  2. java基础七 [图形用户接口](阅读Head First Java记录)

    到目前为止我们接触的都是Java的命令行,但是为了让用户使用,必须有图形化界面,所以这章主要讲的是怎么使用GUI(图形用户接口)   创建一个GUI:javax.swing.* 本章讲的布局相关内容都 ...

  3. java基础(七) java四种访问权限

    引言   Java中的访问权限理解起来不难,但完全掌握却不容易,特别是4种访问权限并不是任何时候都可以使用.下面整理一下,在什么情况下,有哪些访问权限可以允许选择. 一.访问权限简介 访问权限控制: ...

  4. Java基础(七)--Exception异常处理

    发现错误的理想时机是程序运行之前(编译期),然后不太现实,很多异常无法被发现(特别是业务上的数据),需要在运行时解决. 错误恢复机制保证代码健壮性的方式,异常处理在程序中很常见,也是必须的,必须考虑有 ...

  5. java基础(七)-----深入剖析Java中的装箱和拆箱

    本文主要介绍Java中的自动拆箱与自动装箱的有关知识. 基本数据类型 基本类型,或者叫做内置类型,是Java中不同于类(Class)的特殊类型.它们是我们编程中使用最频繁的类型. Java是一种强类型 ...

  6. 《温故而知新》JAVA基础七

    抽象类 定义:抽象类前面使用abstract关键字修饰(只用语被继承) 应用场景: 在父类中写一些子类中即将实现的方法,具体的实现在子类中写,也可以将多种特征相同的类抽离出来 使用规则 abstrac ...

  7. Java基础七(Eclipse工具)

    今日内容介绍1.Eclipse开发工具2.超市库存管理系统 ###01Eclipse的下载安装 * A: Eclipse的下载安装  * a: 下载 * http://www.eclipse.org ...

  8. Java基础(七)

    字符串String类 字符串的两个问题 构造方法 字符串池 字符串的内容不可变 比较方法 练习:模拟登陆 练习:模拟登陆(限制重试次数) 替换方法(敏感词过滤) 如果希望将字符串当中指定的部分进行替换 ...

  9. java基础(七)--键盘输入

    一.示例 package cnblogs; import java.util.Scanner; public class TestBase07IO { public static void main( ...

随机推荐

  1. AMCL论文及源码解析--参数(持续更新中)

    整理内容来自:http://wiki.ros.org/amcl 1.AMCL订阅的节点: scan (sensor_msgs/LaserScan):激光数据 tf (tf/tfMessage):各种转 ...

  2. C语言 while

    C语言 while while 语句 流程图 案例 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stri ...

  3. Linux 编译安装python3

    编译安装python3的步骤 1.很重要,必须执行此操作,安装好编译环境,c语言也是编译后运行,需要gcc编译器golang,对代码先编译,再运行,python是直接运行yum install gcc ...

  4. 3.Docker 操作镜像

    获取镜像 之前提到过,Docker Hub 上有大量的高质量的镜像可以用,这里我们就说一下怎么获取这些镜像. 从 Docker 镜像仓库获取镜像的命令是 docker pull.其命令格式为: doc ...

  5. git本地仓库远程仓库地址更改

    git remote rm origingit remote add origin git@52.82.8.87:iot3.0-service/test.gitgit push -u origin - ...

  6. Mesh R-CNN 论文翻译(实验部分)

    本文为 Mesh R-CNN 论文翻译(原理部分)的后续.Mesh R-CNN 原论文. 4 实验   我们在ShapeNet上对网格预测分支进行基准测试,并与最先进的方法相比较.然后,我们在野生的有 ...

  7. C++构造函数和重载函数运算符如何区分

    构造函数和重载函数运算符如何区分: class Distance { private: int feet; int inches; public: Distance(){ feet = ; inche ...

  8. 二分-D - Can you solve this equation?

    D - Can you solve this equation? Now,given the equation 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y,can you ...

  9. setUserData

    node.setUserData();//设置每个节点的datanode.getUserData();

  10. OpenGL 编程指南 (5.1)

    1.OpenGL支持同时使用多个纹理单元,使用GL_TEXTUREi进行标识,使用前需要先激活对应的纹理单元,默认GL_TEXTURE0是激活绑定的. void glActiveTexture(GLe ...