关键字this 有两个用途:
1,引用隐式参数
2,调用该类其他的构造器
super也有两个用途:
1 ,调用超类的方法
2,调用超类的构造器
警告:
子类在覆盖父类的一个方法时,子类方法不能低于父类方法的可见性,即 如果父类的类方法是public,则子类方法一定要声明为public。
final修饰的类不能被继承,final修饰的方法不能被覆盖。
3,强制类型转换
eg:
double x=3.405;
int nx=(int)x;
只能在继承层次内进行类型转换。
在将父类 转换为子类之前,应该使用instanceof进行检查。
if(staff[1] instanceof Manager){
boss=(Manager)staff[1];
}
public>protected>default>private
public: 对所有类可见
protected:具有跨包性
default:不具有跨包性
private:仅对本类可见
4,Object:所有类的父类
可以使用Object类的变量引用任何类型的对象
Object obj=new Employee("Harry Hacker",35000);
equals方法
public boolean equals(Object otherObject){
if(this==otherObject)return true;
if(otherObject==null)return false;
if(this.getClass()!=otherObject.getClass())return false;
Employee other=(Employee)otherObject;
return name.equals(other.name)&&salary==other.salary&&hireDay.equals(other.hireDay)
}
5,hashCode方法
哈希表,hashCode
String类使用下列算法计算散列码
String s;
int hash=0;
for(int i=0;i<s.length();i++){ hash=31*hash+s.charAt(i); }
如果重新定义equals方法,就必须重新定义hashCode方法,
6,toString方法
public String toString(){
return getClass().getName()+"[name="+name+",salary="+salary+",hireDay="+hireDay+"]";
}
int[] number={2,3,5,7,11,13};
String s=Arrays.toString(number);
7,包装类和基本类型
基本类:byte、short、int、char、long、float、double、boolean
包装类:Byte、Short、Integer、Character、Long、Float、Double、Boolean
其中
Integer、Long、Float、Double、Short、Byte继承自公共的父类Number。
包装类是final修饰的,因此不能定义他们的子类。
ArrayList<Integer> list=new ArrayList<Integer>();
尖括号中的类型参数不允许是基本类型。即为包装类
自动装箱和自动拆箱
list.add(3)将自动变换成
list.add(Integer.valueOf(3);
int n=list.get(i);
=> int n=list.get(i).intValue();
包装器对象比较时调用equals方法
Integer a=1000;
Integer b=1000;
if(a.equals(b))//比较的是a、b的内容是否相同
a==b//比较的是a、b是否指向同一个内存区域
要想将字符串转换成整型,
int x=Integer.parseInt(s);
参数可变
计算若干个数值的最大值:
public static double maxValue(double... values){
double max=Double.MIN_VALUE;
for(double v:values)
if(v>max)
maxx=v;
return max;
}
调用该方法:
double n=maxValue(3.1,40.4,-5);
编译器将new double[]{3.1,40.4,-5}传递给maxValue方法
System.out.printf("%d %s",new Object[]{new Integer(1),"widgets"});
printf方法接收两个参数,一个是格式字符串,另一个是object[]数组。
枚举类
public enum Size{SMALL,MEDIUM,LARGE,EXTRA_LARGE};
在比较两个枚举类型的值时,不需要调用equals方法,而直接使用"=="就可以了。
Size.SMALL.toString()将返回字符串"SMALL"
toString的逆方法是静态方法valueOf,例如
Size s=Enum.valueOf(Size.class,"SMALL");将s设置为Size.SMALL
Size[] values=Size.values();