《第3章面向对象程序设计基础详解》由会员分享,可在线阅读,更多相关《第3章面向对象程序设计基础详解(138页珍藏版)》请在金锄头文库上搜索。
1、第3章面向对象程序设计基础详解3.1 类与对象3.1.2 类的定义和使用1.类的定义Java类的基本语法: class 可以是任何合法的标识符,并且是所声明类的名字。有几种可使用的,但现在只使用public,声明类可被任意访问。类的正文声明了与类相关的数据属性、构造器和方法的集合。BirthDay类class BirthDay int year,month,day;定义某变量为该类型创建对象:new 类名三赋值成员变量的使用请看例3-13.1.3 源文件构成及命名(1)一个程序中由一个或多个类构成,这些类可以放在同一个源文件中,也可以放在不同文件中,编译后每个类都会对应一个class文件,该c
2、lass文件主名与类名相同。(2)如果一个源文件中各个类前面都没有public修饰符修饰,源文件主名可以任意取。(3)如果一个源文件中某个类前面有public修饰符,则文件名必须与public修饰的类同名,但一个源文件中最多只能有一个类被public修饰。(4)对于可以独立运行的Java Application程序,在命令行中通过 “java 主类名”执行,这里主类是包括main三方法的类,该方法是程序的入口,且类名后不能带后缀“.class”。3.1.4 基本类型与参考类型变量的区别1. 基本数据类型int x,y;x=10;y=20;y=x;3.1.4 基本类型与参考类型变量的区别2. 参
3、考数据类型BirthDay Tombth,Marybth;Tombth=new BirthDay三;Marybth=new BirthDay三;Tombth.year=202X;Tombth.month=9;Tombth.day=10;Marybth.year=202X;Marybth=Tombth;3.2 方法方法的基本语法: () 可以是任何合法的标识符,但限制使用那些已经在使用的名称。是可选项,并可有很多不同的修饰符,包括public、protected和private等。public访问修饰符表明可从其他代码调用该方法。private表明方法只能在由该类中其他方法调用。请看例3-3请看
4、例3-43.2.3 方法的重载要构成方法的重载必须满足如下条件:(1)重载的方法在同一个类中,方法名相同(2)方法的参数类型、个数、顺序至少有一个不同修改例3-33.3 封装class BirthDay int year,month,day;public class BirthTest public static void main (String argsp) BirthDay Tombth,Marybth; Tombth=new BirthDay三; Marybth=new BirthDay三; Tombth.year=202X; Tombth.month=9; Tombth.day=10
5、;.容易产生问题3.3 封装实现封装的步骤(1)修改属性的可见性,如private修饰重要的成员变量(2)创建访问属性的方法,如set、get方法等(3)在方法中,加入属性的存取限制3.4 构造器3.4.1 构造器的特点构造器的基本语法: () 3.4.1 构造器的特点构造器作用:完成类对象的初始化工作构造器的名称必须与类名相同构造器没有返回值并且不可被继承一般将构造器的修饰符声明为public构造器中不能有return语句3.4.1 构造器的特点参数表与方法声明中的一样。可以象方法一样向构造器传递参数。构造器可以有0个、1个或者多个参数。(1)无参数的构造器没有构造器使用默认的构造器(没有参
6、数,没有方法体)如果使用没有参数的构造器,则创建的对象具有相同的初始值class BirthDayint year,month,day;BirthDay三year = 20XX;month = 9;day = 15;(2)带参数的构造器class BirthDayint year,month,day;BirthDay(int y,int m,int d) year = y; month = m; day = d;class BirthDayint year,month,day;BirthDay(int year, int month,int day)this.year = year;this.
7、month = month;this.day = day;3.4.2 构造器的使用不能由编程人员显式调用。在创建一个类的新对象的同时,系统会自动调用该类的构造器为新对象初始化。构造器只能和new运算符一起使用。格式:类名 对象名=new 构造器名称(成员变量的初始值)请看例3-10.3 构造器的重载一个类可以有多个构造器,叫做构造器的重载。条件(满足其一) 参数的个数不同 参数的类型不同请看例3-11.4 多个构造器的相互调用在一个构造器中只能通过this关键字来调用重载的另一个构造器请看43页例子默认构造器每个类至少有一个构造器。如果不编写构造器,则自动添加默认构造器:默认构造器不带参数默认
8、构造器函数体为空不必编写构造器就能使用new Xxx三创建 对象实例找错误?class Person private String name = model; private int age=20; private double height = 1.7; private double weight = 60; public Person(String name,int age,double height,double weight) this.name=name; this.age=age; this.height=height; this.weight=weight; class test
9、 public static void main(String args) Person p1=new Person三; Person p2=new Person(“jerry”,20,1.9,100);哪个语句有错?为什么?【上机作业1】定义一个人类,描述人类的姓名、年龄、身高、体重,定义一个方法用来检验人的体重是否在正常范围之内,定义一个方法用于得到是否肥胖的结论。 (需要定义构造器)计算标准上机作业2定义一个圆类,类中包含圆心x坐标、y坐标和半径等属性,有计算圆面积和周长的方法。(要求:定义构造器)【0916上机情况总结】工程名的命名问题(不要命名为*.java)类的构成找问题1clas
10、s PersonString name;int age;double height,weight;double bmi = weight/(height*height);if(bmi19.8) System.out.println(偏瘦);找问题2class PersonString name;int age;double height,weight;void setAge(int a)this.age = a;void printAge三System.out.println(a);找问题3class Circleint x,y,radius;public Circle(int x, int
11、y, int radius) this.x = x;this.y = y;this.radius = radius;void print三System.out.println(周长是:+2*3.14*radius);System.out.println(面积是:+3.14*radius*radius);【上节内容复习】如何实现封装?构造器的作用?何时调用构造器?【书面作业的问题】书写雷同3.5 变量的作用域和初始化(1)局部变量:要先赋值再使用方法内部定义作用域是整个方法方法的代码块中定义作用域是代码块【找问题】void print三 double pi; System.out.println
12、(周长是:+2*pi*radius); System.out.println(面积是:+pi*radius*radius);3.5 变量的作用域和初始化(2)参数由实参赋值方法或构造器的参数作用域是方法或构造器内部【举例】public class test public static void main(String args) Circle c1 = new Circle(1,2,5);class Circleint x,y,radius;public Circle(int x, int y, int radius) this.x = x;this.y = y;this.radius = r
13、adius;3.5 变量的作用域和初始化(3)成员变量对象创建时有默认值在类内、方法外定义整个类3.7 父类、子类和继承继承在继承关系中,被继承的类为父类,由继承得到的类为子类。子类可以继承父类中的属性和方法,也可以在子类中添加新的属性和方法,也可以修改定义原有(从父类继承得到的)的变量成员,重写原有的方法。 在Java中,所有的类都是直接或间接地继承类Object,也就是说在Java的类树中,Object是这棵树的根。【例3-15】Student类Student+studentNo : String+name : String+showInfo三 : voidclass Student St
14、ring studentNo,name; void showInfo三 System.out.println(学号:+studentNo); System.out.println(姓名:+name); 【例3-15】子类化Collegian +major : Stringclass Student String studentNo,name; void showInfo三 System.out.println(学号:+studentNo); System.out.println(姓名:+name); class Collegian extends Student String major;St
15、udent+studentNo : String+name : String+showInfo三 : void单继承(Java只支持单继承)当类只从一个类继承时,称为单继承Java中类的继承结构为树状语法: class extends * 【例3-15】class Student String studentNo,name; void showInfo三 System.out.println(学号: +studentNo); System.out.println(姓名: +name); class Collegian extends Student String major;class stt
16、est0 public static void main (String args) Collegian cst=new Collegian三; cst.studentNo=0810123; cst.name=张三; cst.major=计算机; cst.showInfo三;【对例3-15的说明】大学生是学生的一种类型,所以把Collegian定义为Student的子类是合乎它们之间的逻辑关系的另一方面,通过继承可以避免程序的冗余。通过运行结果可以看到,子类Collegian从父类Student中继承了成员变量studentNo、name和方法showInfo三将父类属性改为private,结果如何呢?class Student private String studentNo,name; void showInfo三 System.out.println(学号:+studentNo); System.out.println(姓名:+name); class Collegian extends Student String major;class sttest1 public stat