当前位置:文档之家› 通过代码实例跟我学Java面向对象编程技术及应用提高(第6部分)

通过代码实例跟我学Java面向对象编程技术及应用提高(第6部分)

通过代码实例跟我学Java面向对象编程技术及应用提高(第6部分)
通过代码实例跟我学Java面向对象编程技术及应用提高(第6部分)

1.1通过代码实例跟我学Java面向对象编程技术及应用提高(第6部分)1.1.1类体中的特殊成员函数——构造方法

1、什么是构造方法

与类名同名并且无任何返回值类型定义(因为它只是用来创建对象)的public型成员方法。在Eclipse中创建某个类时,选择了如下的选项:

将在该类自动地添加一个默认形式的构造方法

2、了解构造方法的执行时机

(1)是由系统自动调用——不能在代码中通过对象直接调用构造方法

(2)在构造对象时(new语句被执行时将被调用)

在StudentInfo类的默认构造方法中添加如下的输出代码:

public StudentInfo() {

System.out.println("这是默认的构造方法");

}

同时再测试类中添加如下的输出语句:

package com.px1987.j2seexample;

public class TestStudentInfo {

public TestStudentInfo() {

}

public static void main(String[] args) {

StudentInfo oneStudent=null; //声明一个对象

oneStudent=new StudentInfo(); //对声明的对象进行实例化(创建出它)

System.out.println("构造方法已经被执行");

oneStudent.setStudentName("张三"); //使用对象

oneStudent.studyCourse("Java语言编程技术");

oneStudent.trainSelf("C++语言编程技术");

oneStudent=null; //释放对象所用的内存空间

}

}

(3)当类中定义有多种不同形式的构造方法时——依据创建对象时所给定的“参数”来决定对哪个构造方法调用

package com.px1987.j2seexample;

public class StudentInfo extends Person{

public StudentInfo() {

System.out.println("StudentInfo类的缺省构造方法被执行了!");

}

public StudentInfo(String name) {

studentName=name;

System.out.println("StudentInfo类的StudentInfo(String name)构造方法被执行了!");

}

}

(4)一旦在类中提供有构造方法,此时创建对象的参数必须要与类中的某个构造方法的参数保持一致性

(5)最终的代码示例如下

package com.px1987.j2seexample;

public class TestStudentInfo {

public TestStudentInfo() {

}

public static void main(String[] args) {

StudentInfo oneStudentInfo=null;

oneStudentInfo=new StudentInfo();

System.out.println("继续执行!");

StudentInfo twoStudentInfo=null;

twoStudentInfo=new StudentInfo("李四");

oneStudentInfo.setStudentName("张三");

oneStudentInfo.studyCourse("Java语言核心技术");

oneStudentInfo.trainSelf("C++语言编程技术");

oneStudentInfo=null;

}

}

3、了解构造方法的作用——在构造方法体内进行成员参数赋值(如何编程构造方法体代码)package com.px1987.j2seexample;

public class StudentInfo extends Person{

public StudentInfo() {

System.out.println("StudentInfo类的缺省构造方法被执行了!");

}

public StudentInfo(String name) {

studentName=name;

System.out.println("该学生的名字为:"+ studentName);

}

}

1.1.2类体中的特殊成员函数——重载方法

1、什么是重载方法

(1)类体中以“同名”而“不同形参定义出”的成员方法。

或者另一种形式的参数——形参一定要有差别(不同)

2、下面形式的方法不是重载方法

(1)因为它们的形参没有差别

(2)尽管它们的返回值不同,但编译系统并不以返回值类型作为重载方法区分的依据

(3)因为两个方法的名称不同,当然就不是重载方法

3、请阅读下面的代码——了解重载方法被调用的规则

import java.util.Date;

public class OverLoadMethodDemo {

public void someOneOverLoadMethod(Date someOneDate) {

System.out.println("在参数为Date类型的方法中的输出的值为:"+someOneDate);

}

public void someOneOverLoadMethod(Object someOneObject) {

System.out.println("在参数为Object类型的方法中的输出的值为:"+someOneObject);

}

public static void main(String[] args) {

OverLoadMethodDemo oneOverLoadMethodDemo=new OverLoadMethodDemo();

oneOverLoadMethodDemo.someOneOverLoadMethod(null);

oneOverLoadMethodDemo.someOneOverLoadMethod(new

java.sql.Date(109,10,10));

//也可以:oneOverLoadMethodDemo.someOneOverLoadMethod(new

java.util.Date(109,10,10));

}

}

null是作为一个很特别的参数传给了方法someOneOverLoadMethod ()方法,但可以认为null是Date、也可以认为null是Object。但是从类的层次上看Object处在更上层(基类),Date是从Object类继承来的,调用someOneOverLoadMethod(Date someOneDate)方法将更能够准确匹配。

另外java.sql.Date类是java.util.Date的子类,因此传递new java.sql.Date(109,10,10)对象时,也将调用someOneOverLoadMethod(Date someOneDate)方法。

4、了解重载方法调用的规则——系统根据实际参数的“个数”和“类型”匹配的原则调用对应的重载方法

package com.px1987.j2seexample;

import java.util.Date;

public class TestStudentInfo {

public static void main(String[] args) { StudentInfo zhang=null; /* (1) */

zhang=new StudentInfo("张三"); //(2)

zhang.trainSelf("打球");

Date nowDate=new Date();

zhang.trainSelf("打球",nowDate);

}

}

1.1.3继承与派生中的子类中的成员的正确编程

1、子类中如何进行继承与派生父类(可以采用简单的比较法)

比较基类和派生类之间的相同与不同点,对相同点则加以继承(不必重定义出);而对差异部分则加以定义出。常用的手段:

(1)继承基类中的原始成员(当派生类中未定义出该成员时将自动采用继承)——“遗传”。(2)覆盖(替换)父类中的成员函数:当父类中的某些成员函数不再适合子类的需要时,在子类中应重写出自己的成员函数——“变异”。

(3)扩充增强子类功能:当子类要求具有新的功能时,应添加出该功能(新添新的成员)——“进化”。

package com.px1987.j2seexample;

import java.util.Date;

public class DoctorStudentInfo extends StudentInfo {

public DoctorStudentInfo() {

}

public void studyCourse(String courseContent){ //override(覆盖,重写)

super.studyCourse(courseContent);

//String infoText="ID号为"+studentID+"并且";

System.out.println("姓名为"+ getStudentName()+"的学生正在学习"+

courseContent+"课程");

}

/* 下面的各个方法是继承

public void trainSelf(String item){ // overLoad(重载)

System.out.println("姓名为"+studentName+"的学生正在复习"+

item+"课程");

}

public void trainSelf(String item,Date time){

System.out.println("姓名为"+studentName+"的学生正在复习"+

item+"课程");

}

*/

public void doResearch(String item){ //扩展

System.out.println("姓名为"+ getStudentName()+"的学生正在进行科学研究"+

item+"项目");

}

}

学员练习:

在下面的“点”的基础上创建出“圆”类(继承Point类),正确地定义出Circle类中的

成员。

package com.px1987.j2seexample;

public class Point {

private int x,y;

public Point() {

x=0;

y=0;

}

public Point(int newX, int newY) {

x=newX;

y=newY;

}

public void draw(){

System.out.println("正在画点");

}

}

参考答案:

package com.px1987.j2seexample;

public class Circle extends Point{

private int radius;

private final static float PI=3.1415926f;

public Circle() {

}

public void draw(){

System.out.println("正在画圆");

}

public float calculateArea(){

float circleArea=PI*radius*radius;

return circleArea;

}

public float calculateLength(){

float circleLength=2*PI*radius;

return circleLength;

}

}

学员练习:

在TeacherInfo(讲师)类的基础上,继承出Professor(教授)类,并正确地设计和定义出Professor类中的成员。

相关主题
文本预览
相关文档 最新文档