java基础之子类实例化

Posted 看不尽的尘埃

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:UsersadminDesktopjava_code练习六> javac .Test.java
PS C:UsersadminDesktopjava_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:UsersadminDesktopjava_code练习六> java Test
liming
18
90

  

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

 

 

以上是关于java基础之子类实例化的主要内容,如果未能解决你的问题,请参考以下文章

阿花宝宝 Java基础笔记 之 抽象类与抽象方法

创建片段而不从 java 代码实例化它

effective java学习笔记之不可实例化的类

Java基础篇之接口interface

Java之关键字abstract(抽象类与抽象方法)

5_面向对象-中之子类对象实例化全过程