Java继承

关键字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 obj) {
    if(obj==null)
      return false;
    if(this == obj){
      return true;
    }
    if (obj instanceof Person) {
      Person other = (Person) obj;
      return  (p.name).equals(this.name);
    }
    return false;
  }
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();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值