理论知识部分
一、类、超类和子类
1类继承的格式: class 新类名extends已有类名。
2. 已有类称为:超类(superclass)、基类(base class) 或父类(parent class)
新类称作:子类(subclass)、派生类(derived class)或孩子类(child class)
3.super是一个指示编译器调用超类方法的特有关键字,它不是一个对象的引用,不能将super赋给另一个对象变量
4.从一个超类扩展而来的类集合称为继承层次。在继承层次中,某个类到其祖先的路径被称为该类的继承链。
注:Java不支持多继承。
5.多态性:多态性泛指在程序中同一个符号在不同的情况 下具有不同解释的现象。
6. 不允许继承的类称为final类,在类的定义中用final修饰符加以说明
7.抽象类:抽象方法充当着占位的角色,它们的具体实现在子类中。
抽象类不能被实例化,即不能创建对象,只能产生子类。
二、Object:所有类的超类
1 Object类是Java中所有类的祖先——每一个类都由它扩展而来。在不给出超类的情况下,Java会自动把Object 作为要定义类的超类。
2.可以使用类型为Object的变量指向任意类型的对象。但要对它们进行专门的操作都要进行类型转换。
3. Object类中的equals方法用于测试某个对象是否同另一个对象相等。它在Object类中的实现是判断两个对象是否具有相同的引用。如果两个对象具有相同的引用,它们一定是相等的。
4. Object类中的hashCode方法导出某个对象的散列码。散列码是任意整数,表示对象的存储地址。
两个相等对象的散列码相等。
三.泛型数组列表
1. Java中,利用ArrayList类,可允许程序在运行时确定数组的大小。.
2.ArryList是一个采用类型参数的泛型类。为指定数组列表保存元素的对象类型,需要用一对尖括号将数组元素对象类名括起来加在后面。
ArryList<Employee> staff=new ArrayList<Employee>();
四.对象包装器和自动打包
1. 所有基本数据类型都有着与之对应的预定义类,它们被称为对象包装器。
2. 对象包装器类是不可变的,即一旦构造了包装器,就不允更改包装在其中的值。且对象包装器类还是final,因此不能定义它们的子类。
3. 在JavaSE5.0中,可以自动的将基本数据类型转换为包装器类的对象,将这种变换称为自动打包
五.参数数量可变的方法
1. 在Java SE 5.0以前的版本中,每个Java方法都有固定数量的参数。然而,现在的版本提供了可以用可变的参数数量调用的方法(称为“可变参 ”方法)。
2. 用户自己可以定义可变参数的方法,并将参数指定为任意类型,甚至是基本类型。
六.枚举类
1. 声明枚举类
publicenumGrade{A,B,C,D,E};
它包括一个关键字enum,一个新枚举类型的名字 Grade以及为Grade定义的一组值,这里的值既非整型,亦非字符型。
2. 枚举类是一个类,它的隐含超类是java.lang.Enum。
3.枚举值并不是整数或其它类型,是被声明的枚举类的自身实例
七.继承设计的技巧
1. 将公共操作和域放在超类。
2.不要使用受保护的域。
3.使用继承实现“is-a”关系。
4.除非所有继承的方法都有意义,否则就不要使用继承。
5.在覆盖方法时,不要改变预期的行为。
6.使用多态,而非类型信息。
7.过多地使用反射。
实验部分
实验一
测试程序1:
在elipse IDE中编辑、调试、运行程序5-1 (教材152页-153页) ;
掌握子类的定义及用法;
结合程序运行结果,理解并总结OO风格程序构造特点,理解Employee和Manager类的关系子类的用途,并在代码中添加注释。
/** * This program demonstrates inheritance. * @version 1.21 2004-02-21 * @author Cay Horstmann */ public class ManagerTest { public static void main(String[] args) { // construct a Manager object //构建管理者对象 Manager boss = new Manager("Carl Cracker", 80000, 1987, 12, 15); boss.setBonus(5000); Employee[] staff = new Employee[3];//定义一个包含三个雇员的数组 // fill the staff array with Manager and Employee objects //用Manager和Employee对象填充人员数组 staff[0] = boss; staff[1] = new Employee("Harry Hacker", 50000, 1989, 10, 1); staff[2] = new Employee("Tommy Tester", 40000, 1990, 3, 15); // print out information about all Employee objects //打印所有员工对象的信息 for (Employee e : staff) System.out.println("name=" + e.getName() + ",salary=" + e.getSalary()); //输出每个人的薪水 } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 package inheritance; import java.time.*; public class Employee { private String name; private double salary; private LocalDate hireDay; public Employee(String name, double salary, int year, int month, int day) { this.name = name; this.salary = salary; hireDay = LocalDate.of(year, month, day); } public String getName() { return name; }
讯享网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/60405.html