黑马程序员技术交流社区
标题:
求助。。。
[打印本页]
作者:
周一川
时间:
2013-4-15 12:26
标题:
求助。。。
有这样三个类,Person,Student.GoodStudent。其中Student继承了Person,GoodStudent继承了Student,三个类中只有默认的构造函数,用什么样的方法证明在创建Student类的对象的时候是否调用了Person的构造函数,在创建GoodStudent类的对象的时候是否调用了Student构造函数?如果在创建Student对象的时候没有调用Person的构造函数,那么采用什么样的手段可以调用父类的构造函数?
作者:
姓名长度不符
时间:
2013-4-15 12:38
在加载子类的时候java底层会自动加载父类的无参构造函数,只要在无参构造函数里面打印就好了,
public class Test
{
public static void main(String []args)
{
GoodStudent GS = new GoodStudent();
}
}
class Student extends Person
{
Student(){
System.out.println("Student");
}
}
class Person
{
Person(){
System.out.println("Person");
}
}
class GoodStudent extends Student
{
GoodStudent(){
System.out.println("GoodStudent");
}
}
复制代码
这是类的加载问题,自己动手试一下就知道了
作者:
李海鹏
时间:
2013-4-15 12:43
证明有没有调用,直接在构造函数里整个输出语句就行,如果没有调用,使用super.Student()和super.Person(),super就是父类的意思
作者:
张源锋
时间:
2013-4-15 12:46
默认的构造函数就是无参的构造函数,例子
public class Test2 {
public static void main(String[] args) {
new Student();
System.out.println("**********************");//分隔条
new GoodStudent();
}
}
class Person{
Person(){
System.out.println("person的构造函数");
}
}
class Student extends Person{
Student(){
System.out.println("Student的构造函数");
}
}
class GoodStudent extends Student{
GoodStudent(){
System.out.println("GoodStudent的构造函数");
}
复制代码
结果
person的构造函数
Student的构造函数
**********************
person的构造函数
Student的构造函数
GoodStudent的构造函数
复制代码
就是说当你new Student();它会调用父类Person的构造函数;new GoogStudent()时,它会调用Student父类构造函数,当调用student构造函数时会调用person的构造函数,也就是说GoogStudent会调用它所用父类的构造函数;不存在不会调用父类构造函数的情况
作者:
乘鱼飞
时间:
2013-4-15 12:51
本帖最后由 乘鱼飞 于 2013-4-15 12:55 编辑
class Person
{
protected Person()
{
System.out.println("我是Person类,这是我的无参构造器");
}
}
class Student extends Person
{
protected Student() {
System.out.println("我是Student类,这是我的无参构造器");
}
}
class GoodStudents extends Student
{
protected GoodStudents()
{
System.out.println("我是GoodStudents类,这是我的无参构造器");
}
}
public class Test_Stu {
public static void function(Object obj)
{
if(obj instanceof Student )
{
Student sc1=new Student();
}
else if(obj instanceof GoodStudents )
{
GoodStudents sc2=new GoodStudents();
}
else if(obj instanceof Person )
{
Person sc3=new Person();
}
}
public static void main(String[] args) {
function(new Student());//调用Person构造器和Student构造器
//function(new GoodStudents());//调用Student构造器和GoodStudents构造器
}
}
输出结果:
我是Person类,这是我的无参构造器
我是Student类,这是我的无参构造器
我是Person类,这是我的无参构造器
我是Student类,这是我的无参构造器
作者:
love_java
时间:
2013-4-15 13:28
class Person{
public Person(){
System.out.println("Person");
}
}
class Student extends Person{
public Student(){
System.out.println("Student");
}
}
class GoodStudent extends Student{
public GoodStudent(){
System.out.println("GoodStudent");
}
}
public class Test6{
public static void main(String args[]){
Student s = new Student();
System.out.println("===================");
GoodStudent gs=new GoodStudent();
}
}
复制代码
运行结果:
Person
Student
===================
Person
Student
GoodStudent
这也就说明继承以后都是默认调用的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2