标签:OLE getc 结果 new ams 技术 getname 类型信息 实例化
5.9 抽象类
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。
由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。
父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。
在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。
// 抽象类的定义 public abstract class Employee { private String name; private String address; private int number; public Employee(String name, String address, int number) { System.out.println("Constructing an Employee"); this.name = name; this.address = address; this.number = number; } } // 继承抽象类 public class Salary extends Employee { private double salary; //Annual salary public Salary(String name, String address, int number, double salary) { super(name, address, number); setSalary(salary); } } // 类初始化 public class AbstractDemo { public static void main(String [] args) { Salary s = new Salary("Mohd Mohtashim", "Ambehta, UP", 3, 3600.00); Employee e = new Salary("John Adams", "Boston, MA", 2, 2400.00); } }
5.10 受保护访问
大家都知道,最好将类中的域标记为private,而方法标记为public,任何声明为private的内容对其他类都是不可见的,子类也不能访问超类的私有域
有些时候,人们希望超类中的某些方法允许被子类访问,或允许子类的方法访问超类的某个域,为此需要把这些方法或域声明为protected
归纳一下Java用于控制可见性的四个访问修饰符
1)仅对本类可见-----private
2)对所有类可见-----public
3)对本包和所有子类可见-----protected
4)对本包可见-----默认,不需要修饰符
5.2 Object:所有类的超类
Object类是Java中所有类的始祖,在Java中每个类都是由它扩展而来的,但是并不需要明确地指出超类,Object会被认为是这个类的超类,可以使用Object类型的变量引用任何类型的对象
1.equals方法
Object类中的equals方法用于检测一个对象是否等于另一个对象
2.相等测试与继承
Java语言规范要求equals方法具有下面的特性:
1)自反性:对于任何非空引用x,x.equals(x)应该返回true;
2)对称性:对于任何引用x和y,当且仅当y.equals(x)返回true,x.equals(y)也应该返回true
3)传递性 对于任何引用x,y和z,如果x.equals(y)返回true,y.equals(z)返回true,x.equals(z)也应该返回true
4)一致性:如果x和y引用的对象没有发生变化,反复调用x.equals(y)应该返回同样的结果
5)对于任意非空引用x,x.equals(null)应该返回false
3.hashcode方法
可以利用hashcode方法判断两个对象是否不相等,如果hashcode产生的散列码不相等,两个对象必定不相等,如果产生的散列码相等,则有可能两个对象相等,要判断两个对象是否相等必须使用equals方法
4.toString方法
它用于返回表示对象值的字符串,强烈建议为自定义的每一个类都增加toString方法
5.3 泛型数组列表
在Java中,解决数组大小必须初始化的问题就是使用ArrayList类,它可以自动调节数组容量,例如:
ArrayList<Employee> staff = new ArrayList<>();
这被称为"菱形"语法,可以结合new操作符使用菱形语法,编译器会检查新值是什么
使用add方法可以将元素添加到数组列表中
1.访问数组列表元素
数组列表自动扩展容量增加了访问元素语法的复杂程度,使用 get和set方法可以实现访问或改变数组元素的操作
5.4 对象包装器与自动装箱
对象包装器拥有很明显的名字:Integer,Long,Float,Double,Short,Byte,Character,Void和Boolean,对象包装器类是不可变的,即一旦构造了包装器,就不允许更改包装在其中的值,同时,对象包装器类还是final,因此不能定义它们的子类
5.5 参数数量可变的方法
public static double max (double... values){ // 重点在... 只能在最后一个参数使用
...
}
5.6 枚举类
定义枚举类型:
public enum Size { SMALL , MEDIUM, LARGE, EXTRA_LARGE };
这个声明定义的类型是一个类,在此尽量不要构造新对象,在比较两个枚举类型的值时,直接使用"=="即可
所有的枚举类型都是Enum类的子类,他们继承了这个类的许多方法,其中最有用的就是toString,例如 Size,SMALL.toString()将返回字符串"SMALL"
toString的逆方法时静态方法valueOf,例如:
Size s = Enum.valueOf(Size.class,"SMALL"); // 将s设置成Size.SMALL
5.7反射
1.Class类
Object类中的getClass()方法将会返回一个Class类型的实例
最常用的Class方法是getName,这个方法将返回类的名字,如果类在一个包里,包的名字也作为类名的一部分
2.捕获异常
程序运行过程中发生错误时,就会抛出异常,抛出异常的前提是有一个捕获异常的控制器对异常情况进行处理,如果没提供处理器,程序就会终止,并在控制台打印一条信息
5.8 继承的设计技巧
1.将公共操作和域放在超类
2.不要使用protected域
3.使用继承实现"is-a"关系
4.除非所有继承方法都有意义,否则不要使用继承
5.在覆盖方法时,不要改变预期的行为
6.使用多态,而非类型信息
7.不要过多的使用反射
标签:OLE getc 结果 new ams 技术 getname 类型信息 实例化
原文地址:https://www.cnblogs.com/aLin002/p/13112214.html