0613 Java核心技术卷1

2021-05-12 23:31

阅读:435

标签: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 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.不要过多的使用反射  

 

0613 Java核心技术卷1

标签:OLE   getc   结果   new   ams   技术   getname   类型信息   实例化   

原文地址:https://www.cnblogs.com/aLin002/p/13112214.html


评论


亲,登录后才可以留言!