java基础(七)之子类实例化

知识点;
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会调用父类无参数的构造函数。

原文地址:https://www.cnblogs.com/endust/p/11813368.html

时间: 2024-10-19 16:36:02

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

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

到目前为止我们接触的都是Java的命令行,但是为了让用户使用,必须有图形化界面,所以这章主要讲的是怎么使用GUI(图形用户接口) 创建一个GUI:javax.swing.* 本章讲的布局相关内容都是javax.swing包下的内容,常用的组件有JFrame,JButton,JRadioButton,JCheckBox,JLabel,JList,JScrollPane,JSlider,JTextArea,JTextField,JTable等 创建GUI第一步:创建window(JFrame) JF

重学JAVA基础(七):线程的wait、notify、notifyAll、sleep

/** * 测试thread的wait notify notifyAll sleep Interrupted * @author tomsnail * @date 2015年4月20日 下午3:20:44 */ public class Test1 { /** * 对象锁 * @author tomsnail * @date 2015年4月20日 下午3:14:13 */ private static final Object lockObject = new Object(); /** * 等

java基础知识文章汇总

将之前的所有关于Java基础知识的随笔,整理成质量较高的十几篇随笔,几乎是好几篇比较零散的随笔合成现在的一篇,自认为还不错. java基础(一) 深入解析基本类型 java基础(二) 自增自减与贪心规则 java基础(三) 加强型for循环与Iterator java基础(四) java运算顺序的深入解析 java基础(五) String性质深入解析 java基础(六) switch语句的深入解析 java基础(七) java四种访问权限 java基础(八) 深入解析常量池与装拆箱机制 java

java基础部分----3.继承、子类实例化、函数的复写

1.继承 java只支持单继承,一个子类只能继承一个父类.一个父类可以有多个子类 关键字:extends 减少重复代码 2.继承的语法特点 class Student extends Preson{ } 如果子类继承父类,同时子类在这个基础上添加自己的成员变量和成员函数 3.子类实例化 1.生成子类的过程 在子类的构造函数中,必须调用父类的构造函数(根据()传入的参数个数以及类型决定) lass Student extends Person{ int grade; Student(){ supe

java基础进阶篇(七)_LinkedHashMap------【java源码栈】

目录 一.概述 二.特点 三.应用场合 四.构造方法 1.参数为空 2.accessOrder 五.源码结构分析 六.常见问题 1.如何实现的元素有序? 2.如何保证顺序的正确以及同步 3.如何实现两种顺序(插入顺序或者访问顺序)? 4.为什么重写containsValue()而不重写containsKey()? 七.常用方法 一.概述 ??LinkedHashMap是HashMap的子类,关于HashMap可以看下前面的章节:java基础进阶篇 HashMap public class Lin

java基础知识回顾之java Thread类学习(七)--java多线程通信等待唤醒机制(wait和notify,notifyAll)

1.wait和notify,notifyAll: wait和notify,notifyAll是Object类方法,因为等待和唤醒必须是同一个锁,不可以对不同锁中的线程进行唤醒,而锁可以是任意对象,所以可以被任意对象调用的方法,定义在Object基类中. wait()方法:对此对象调用wait方法导致本线程放弃对象锁,让线程处于冻结状态,进入等待线程的线程池当中.wait是指已经进入同步锁的线程,让自己暂时让出同步锁,以便使其他正在等待此锁的线程可以进入同步锁并运行,只有其它线程调用notify方

复习java基础第七天(反射)

一:目标 Ø理解 Class 类 Ø理解 Java 的类加载机制 Ø学会使用 ClassLoader 进行类加载 Ø理解反射的机制 Ø掌握 Constructor.Method.Field 类的用法 Ø理解并掌握动态代理 1.Class类 –对象照镜子后可以得到的信息:某个类的数据成员名.方法和构造器.某个类到底实现了哪些接口. 对于每个类而言,JRE 都为其保留一个不变的 Class 类型的对象. 一个 Class 对象包含了特定某个类的有关信息. –  Class 对象只能由系统建立对象.

java基础知识回顾之java Thread类学习(七)--java多线程安全问题(死锁)

死锁:是两个或者两个以上的线程被无限的阻塞,线程之间互相等待所需资源. 线程死锁产生的条件: 当两个线程相互调用Join()方法. 当两个线程使用嵌套的同步代码块的时候,一个线程占用了另一个线程的锁,互相等待阻塞,就有可能产生死锁. 下面看代码: 代码1:死锁的案例 package com.lp.ecjtu.Thread; /* 死锁:常见情景之一:同步的嵌套. */ class Ticket implements Runnable { private int num = 100; Object

Java基础复习笔记系列 七 IO操作

Java基础复习笔记系列之 IO操作 1. 2.