长沙岳麓区JAVA程序设计培训

    2015-03-07发布, 次浏览 收藏 置顶 举报
  • 上课班制:

    随到随学

  • 授课时间:

    周末班,晚上班,白天班

  • 授课对象:

    想提升技能者

  • 网报价格:¥电询    课程原价:¥电询
  • 咨询热线:400-998-6158
  • 授课地址:长沙天心区
  • 课程详情

  • 机构简介
  • 地图信息
  • 预约试听

课程关键词:长沙JAVA程序设计培训学校

一、影响创建子类对象的几个因素

Java中创建一个子类对象时,执行流程比较复杂,主要是由于构造器的重载、this关键字的使用、初始化块、继承及super关键字的存在。下面对这几个因素做个简单介绍。

1.方法的重载

Java中允许方法的重载,即同一个类中方法名相同,但参数个数不同或参数的类型不同。除了普通的类方法外,构造器也允许重载。且通过this关键字可以使类的构造器互相调用。

2.this关键字

在构造器中的this关键字,指该构造器所创建的新对象,在方法中的构造器关键字,指调用该方法的对象。使用this关键字,主要是下面三种场合:

在类的内部方法或构造器中引用该类的实例变量和方法;将当前对象作为参数传递给其它方法或构造器;用来调用其他的重载的构造器

3.初始化块

Java中允许类中定义初始化块,即类中的“游离块”——不属于变量声明、不属于方法、不属于构造器,但需要用{}单独括起来。不管使用哪个构造器创建对象,它都会被首先运行,然后才是构造器的主体部分被执行

二、创建子类对象的执行流程

创建一个类对象时,执行流程如下:

1.设置实例变量的值为缺省的初始值

2.调用对象的构造器,绑定构造器参数。

3.如果构造器中有this()调用,则根据this()调用的参数调用相应的重载构造器,然后,转到步骤5;否则转到步骤4。

4. 除java.lang.Object类外,调用父类的中的初始化块初始化父类的属性,然后调用父类构造器,如果在构造器中有super()调用,则根据super()中的参数调用父类中相应的构造器。

5.使用初始化程序和初始化块初始化成员。

6.执行构造器方法体中其他语句。

三、代码演示

下面通过一个例子,来演示上述流程。

工程中涉及的Java源文件如下:

1)包**.person下的父类Person的代码如下:

//------------Person.java---------------
package **.person;
public class Person {
String name = "zhangsan";
String gender = "male";
int age = 200;
public Person() {
System.out.println("Person()");

public Person(String newName) {
name = newName;
System.out.println("Person(String newName)");
System.out.println("name=" + name + " age=" + age + " gender=" + gender);
}
public Person(String newName, int newAge) {
name = newName;
age = newAge;
System.out.println("Person(String newName, int newAge)");
System.out.println("name=" + name + " age=" + age + " gender=" + gender);
}
{
gender = "male";
age = 50;
System.out.println("Person initialize:" + "name=" + name + " age=" + age + " gender=" + gender);
}
}

2)包**.person下的Person的子类Teacher的代码如下:

//---------------Teacher.java---------------
package **.person;
public class Teacher extends Person{
String department = "HR";
int schoolage = 100;
public Teacher() {
System.out.println("Teacher()");
}
public Teacher(String newName) {
super(newName);
System.out.println("Teacher(String newName)");
}
public Teacher(int schoolage) {
this.schoolage = schoolage;
System.out.println("Teacher(int schoolage)");
}
public Teacher(String newName, int newAge) {
super(newName, newAge);
System.out.println("Teacher(String newName, int newAge)");
}
public Teacher(int schoolage, String department) {
this(schoolage);
this.department = department;
System.out.println("Teacher(int schoolage, String department)");
}
{
age = 66;
System.out.println("Teacher initialize:" + "name=" + name + " age=" + age + " gender=" + gender);
}
}

3)包**.person下的main函数代码如下:

//-----------Demo.java------------
package **.person;
public class Demo {
public static void main(String[] args) {
Teacher t1 = new Teacher();
System.out.println("---------------------------");
Teacher t2 = new Teacher("Tom");
System.out.println("---------------------------");
Teacher t3 = new Teacher(10);
System.out.println("---------------------------");
Teacher t4 = new Teacher("Jerry", 35);
System.out.println("---------------------------");
Teacher t5 = new Teacher(20, "教学部");
System.out.println("---------------------------");
}
}

程序的执行结果如下:

Person initialize:name=zhangsan age=50 gender=male
Person()
Teacher initialize:name=zhangsan age=66 gender=male department=HR age=66
Teacher()
---------------------------
Person initialize:name=zhangsan age=50 gender=male
Person(String newName)
name=Tom age=50 gender=male
Teacher initialize:name=Tom age=66 gender=male department=HR age=66
Teacher(String newName)
---------------------------
Person initialize:name=zhangsan age=50 gender=male
Person()
Teacher initialize:name=zhangsan age=66 gender=male department=HR age=66
Teacher(int schoolage)
---------------------------
Person initialize:name=zhangsan age=50 gender=male
Person(String newName, int newAge)
name=Jerry age=35 gender=male
Teacher initialize:name=Jerry age=66 gender=male department=HR age=66
Teacher(String newName, int newAge)
---------------------------
Person initialize:name=zhangsan age=50 gender=male
Person()
Teacher initialize:name=zhangsan age=66 gender=male department=HR age=66
Teacher(int schoolage)
Teacher(int schoolage, String department)



更多培训课程,学习资讯,课程优惠等学校信息,请进入 长沙芙蓉区嵌入式培训长沙天心区嵌入式培训 网站详细了解,免费咨询电话:400-998-6158

预约试听
  • 姓名: *
  • 性别:
  • 手机号码: *
  • QQ:
  • 微信:
  • 其它说明:
  • 验证码: *  看不清,请点击刷新
相关课程