java面向对象程序设计2

更新时间:2023-08-31 11:14:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

教材4~5章

面向对象程序设计2静态域与静态方法 抽象类与抽象方法 最终类与最终方法 包及访问权限控制 接口

静态属性(类属性) static-静态修饰符,可以修饰类中的属性与方法 静态属性(类属性) 被static修饰的属性; 是类的属性,不属于任何一个类的具体对象; 位于类的内存区域中,是该类对象共享的存储单元; 无static修饰的属性为对象属性。 静态属性的访问 类名.属性名 访问的是相同的内存单元 或:对象名.属性名

静态属性例class Employee { //Employee类定义 String name ; int age ; float salary ; static float c_minSalary=500 ; //静态属性,职工最低工资 Employee(String n,int a,float s){ //构造方法 name = n ; age = a ; salary = s; } void upSalary(float inc) { //方法-提薪 salary = salary + inc ; } String getInfo() { //方法-取信息 return "姓名:"+name+" 年龄:"+age+" 工资:"+salary ; } }

静态属性例public class Test { public static void main(String[] args){ Employee emp1 = new Employee("赵兵",28,1500.0F); Employee emp2 = new Employee("何小明",31,1800.0F); System.out.println(Employee.c_minSalary); Employee类 System.out.println(emp1.c_minSalary); c_minSalary:500 System.out.println(emp2.c_minSalary); emp1对象 if(emp1.salary<Employee.c_minSalary) name:赵兵 emp1.upSalary(500.0F) ; age:28 } salary:1500 }

5-1

emp2对象 name:何小明 age:31 salary:1800

静态属性例 可实现各实例之间的通讯。 例:跟踪创建的实例数class Employee { //Employee类定义 String name ; int age ; float salary ; static float c_minSalary=800.0F ; //静态属性,职工最低工资 static int c_count = 0 ; //静态属性,创建对象记数器 Employee(String n,int a,float s){ //构造方法 name = n ; age = a ; if (s < c_minSalary) salary = c_minSalary ; else salary = s;

静态属性例c_count++ ; } } public class Test { public static void main(String[] args){ Employee emp1 = new Employee("赵兵",28,500.0F); System.out.println("赵兵的工资是:" + emp1.salary); Employee emp2 = new Employee("何小明",31,1800.0F); System.out.println("目前创建了" + Employee.c_count + "个对象"); } }

5-2

系统类的静态属性例 Integer类静态属性例: MIN_VALUE 该属性(常量)代表整型数的最小值 MAX_VALUE 该属性(常量)代表整型数的最大值

System类静态属性例: in(该属性为InputStream类型)表示标准输入(键盘) out(该属性为PrintStream类型)表示标准输出(显示器) 测试例: public class Test { public static void main(String[] args){ System.out.println(Integer.MIN_VALUE); // -2147483648 System.out.println(Integer.MAX_VALUE); // 2147483647 } }

静态方法(类方法) static-静态修饰符,可以修饰类中的属性与方法。 静态方法 被 static 修饰的方法;

使用类方法不用创建类的对象。调用这个方法时,应该使用类名做 前缀,而不是某一个具体的对象名。 非static的方法是对象方法(或称实例方法)。 类方法中不能访问实例属性,而只能访问类属性( static属性)、 自己的方法参数及定义的变量。 类方法中不能直接调用本类中的实例方法,但可以调用其他的 static方法。 类方法中没有this值。

静态方法的调用 类名.方法名

静态方法(类方法)例public class Test { public static void main(String[] args){ System.out.println(Math.round(3.54)); String s = toChar(2.718); System.out.println("e=" + s ); 5-3 } static String toChar(double x) { return Double.toString(x); //调用Double类的toString静态方法 } } Math.round(3.54) 是调用Math类的round静态方法,其功能是对参数 值进行四舍五入处理,并将处理的结果返回。 Double.toString(x) 是调用Double类的toString静态方法,其功能是将 Doubie类型的参数值转换为String类型并返回。 在main方法中还调用了Test类中定义的toChar静态方法。

静态方法(类方法) main方法是静态方法,这是为了系统在没有任何实

例化对象之前可以运行一个应用程序。 如果main方法要调用本类的其它方法: 将这些方法设计成静态方法, 创建对象,使用对象方法。

一个静态方法不能被一个非静态方法所覆盖。

静态方法(类方法)例class Employee { //Employee类定义 String name ; int age ; float salary ; static float c_minSalary=500 ; //静态属性,职工最低工资 Employee(String n,int a,float s){ //构造方法 name = n ; age = a ; salary = s ; } static float getMinSalary() { //静态方法,读取静态属性 return c_minSalary ; } static void setMinSalary(float f) { //静态方法,设置静态属性 c_minSalary = f ; } static float findTax(Employee e){ //静态方法,计算税款 return e.salary * 0.1F; } } //Employee

静态方法(类方法)例class Manager extends Employee { float allowance ; Manager(String n,int a,float s , float aa){ //构造方法 super(n,a,s) ; //调用父类构造方法(为3个属性赋值 ) allowance = aa ; //为allowance属性赋值 } // 方法略 } //Manager

静态方法(类方法)例public class Test { public static void main(String[] args){ Employee emp = new Employee("赵兵",28,1400.0F); Manager mgr = new Manager("刘云峰",41,3800.0F,500.0F); Employee.setMinSalary(800.0F); //调用静态方法 System.out.println( "职工最低工资为:" + Employee.getMinSalary() ); System.out.println( http://www.77cn.com.cn + "应交税:" + Employee.findTax(emp) ); System.out.println( http://www.77cn.com.cn + "应交税:" + Employee.findTax(mgr) ); } }

5-4

类的初始化-静态初始化器 由关键字static引导的一对大括号括起的语句组,

用来完成类的初始化的工作。 与

构造方法的区别: 构造方法是对每个新创建的对象初始化,而静态初始化 器是对类自身进行初始化; 构造方法是在用new运算符产生新对象时由系统自动执 行,而静态初始化器则是在它所属的类加载入内存时由 系统调用执行; 不同于构造方法,静态初始化器不是方法,没有方法名 、返回值和参数列表。

静态初始化器例class Employee { //Employee类定义 String name ; int age ; float salary ; static float c_minSalary ; //静态属性,职工最低工资 static int c_count ; //静态属性,创建对象记数器 static { // 静态初始化器,初始化两个静态属性 c_minSalary = 800 ; c_count = 0 ; } Employee(String n,int a,float s){ //构造方法 name = n ; age = a ; if (s < c_minSalary) salary = c_minSalary ; else salary = s; c_count++ ; //创建一个Employee对象,计数器计数一次 } } //测试程序略

抽象类与抽象方法 abstract 修饰符-定义一个抽象类 抽象类是没有具体对象的概念类,不能创建抽象类的对 象; 是类继承中处于较高层次的类,是对子类共性的抽象与 定义; 抽象类的作用是让其子类来继承它所定义的属性及方法 ,以避免各子类重复定义这些相同的内容; 程序员可以先建立抽象类(定义子类共有的属性及方法 ),再从一般类派生出具有特性的子类。

abstract 修饰符-定义一个抽象方法 抽象方法是仅有方法头而没有方法体的方法; 为该类的子类定义一个方法的接口标准,方法的具体实 现在子类中完成。

抽象类与抽象方法 抽象类经常包含某些抽象方法,即规定一些方法的

接口,而方法的代码要由不同的子类去实现。 一个抽象类的子类如果不是抽象类,则它必须为父 类中的所有抽象方法书写方法体。 抽象类中可以定义一般方法和抽象方法,但抽象方 法只能出现在抽象类中。抽象类 抽象方法 一般方法

一般类 X

最终类 用final 修饰符定义的类-最终类 final类不能被继承,final类不能再有子类; 在类的继承树中,final类只能是树的叶子结点; 当然,叶子结点不一定是final类。 类的保护性措施 当通过类名引用类的对象时,实际引用的既可以是该类 的对象本身,也可以是这个类的子类的对象,即有一定 的不确定性; 将一个类定义为final类,可以杜绝其子类的产生,将该 类的属性及方法固定下来,类的内容与类的引用形成稳 定的映射关系。 final类通常是定义那些有固定功能、用来完成某种标准 功能的类。

最终方法 用final 修饰符定义的方法 -最终方法 不能被当前类的子类重新定义的方法。 子类不能再重新定义与此方法同名的自己的方法

,而仅 能使用从父类继承来的方法。只能继承但不能修改。 固定了这个方法所对应的具体操作,可以防止子类对父 类关键方法的错误的重定义,保证了程序的安全性和正 确性。 方法的保护性措施。

本文来源:https://www.bwwdw.com/article/dzxi.html

Top