抽象类
抽象类的子类和普通类的子类相比最大的区别就在于:抽象类可以明确的要求子类覆写哪些特定的方法,,在实际的项目开发过程中,对于extends类继承来讲,更多的时候继承的不是普通类(功能完善的类),而是抽象类。
# 定义抽象类
abstract class Book{
//如果一个类中定义有抽象方法,那么这个类必须声明为抽象类
public abstract void read();//抽象方法,没有方法体
}
- 需要注意的是抽象类不能实例化对象
- 抽象类必须要有子类,可以通过子类实例化对象,然后覆写抽象方法,调用
- 使用抽象类就是为了对子类的方法覆写提供严格的控制要求,这样就非常方便的实现对子类要求。
抽象类说明
- 抽象类必须由子类集成,所以在定义时不允许使用final关键字定义抽象类或抽象方法。
- 抽象类中可以提供static方法,并且该类方法不受到抽象类实例化对象的限制。
包装类
- 包装类在JDK1.5后提供了自动装箱和拆箱机制;
- 基本数据类型的包装类都是为了基本数据类型转换为对象引用而提供的,这样对于基本数据类型与包装类之间就有了一下的转换操作关系。
//手动装箱
Integer obj = new Integer(10);
//intValue、doubleValue等表示从包装类中获取相应类型的数据
// 手动拆箱
int num = obj.intVaule();
//自动拆箱和自动装箱
Integer obj= 10;//自动装箱
int num = obj; //自动拆箱
obj++; //包装类对象直接参与计算
//Object 接收浮点数据
Object obj = 10.2;//double自动装箱为Double,向上转型为Object
double num = (Double) obj;//向下转型,再自动拆箱
num*2;//数值计算
数据类型转换
字符串转换为Integer类:public static int parseInt(String s)
字符串转换为Double类:public static double parseDouble(String s)
字符串转换为Boolean类:public static int parseBoolean(String s) //如果字符串不是true或者false,那么转为bool类型就会都变为false
注意没有类似的parseCharacter(), 因为String类中提供了一个charAt()方法。
基本数据类型转为String型:
//1. 连接空字符串实现转换,这里会有垃圾产生,不建议使用
int num = 100;
String str = num +"";
// 利用valueOf()转换
int num = 100;
String str = String.valueOf(num);
接口
- 通常,接口中可以定义全局常量,抽象方法
-
抽象类和接口比较相似,抽象类里面除了全局常量和抽象方法之外实际上还可以包含有大量普通方法或者是构造方法,而接口中却不会包含有这些内容,同时接口之中的全部访问控制权限都是public。
-
子类实现接口的过程之中,一个接口是不能够继承任何父类的,所以任何的接口一定都没有父类的概念,但是所有的接口对象都可以通过Object来进行接收(Object可以接收一切的引用数据类型,可以实现最终参数的统一)
抽象类和接口的区别
泛型
- 泛型是JDK1.5版本后所提供的新技术特性,利用泛型的特征可以方便地避免对象强制转型所带来的安全隐患问题(ClassCastException异常)
- 泛型设计的核心思想在于:类中的属性或方法的参数与返回值的类型采用动态标记,在对象实例化的时候动态配置要使用的数据类型。
class Point<T>{
private T x;
public void setx(T x){
this.x = x;
}
public T getx(){
return x;
}
}
public class Main{
public static void main(String args[]){
//JDK 1.5,主函数调用确定是Integer,则Point类可接收Integer;Double当然也可接收
Point<Integer> p = new Point<Integer>();
//JDK1.7
Point<Integer> p = new Point<>();
p.setx(10)
int x = p.getx();
}
}
- 需要注意:方法重载中的参数类型不包含泛型。
泛型通配符?
- 通配符可以接收所有的泛型类型的对象实例,但是不允许进行内容的修改,而只是完成内容的获取
- 【类和方法】设置泛型的上限(?extends类):只能使用当前类和当前类的子类作为泛型类型
- 【方法】设置泛型的下限(?super类):只能够设置指定类或者其父类