一、抽象
- 把相同但不确定的方法提取出来,为了以后统一使用并具有多种不同的具体实现(重写)
- 关键字:abstract (修饰抽象方法【即没有方法体,即大括号的方法】,抽象类)
- 抽象方法必须在抽象类中,即普通方法不能有抽象类
- 抽象类中不一定全是抽象方法;可以有普通方法;也可以没有抽象方法
- 继承抽象类后抽象类中的抽象方法必须重写,普通方法可以不重写【抽象类就是为了让子类去具体实现】
- 抽象类不能实例化【因为抽象类可能有抽象方法,抽象方法没有内容不能具体实现,而实例化就是类 的具体实现,所以可能会发生冲突,即不能实例化,也就是普通类为什么不能有抽象方法】,但是可 以有构造方法【构造方法不是为了实例化,而为了构造方法开辟空间的作用,目的是子类实例化时会 先调用父类构造方法】,可以使用多态
- 抽象类中同一方法final与abstract关键字不能同时使用;private和abstract不能同时使用,因为作用冲突【即不能影响抽象方法抽象类的继承】
- 抽象方法不能使用static,抽象方法是对象方法,要保证多样性;static修饰类方法,产生冲突
- 子类继承抽象类后,若不想实现抽象类的抽象方法,则将子类变成抽象类,之后可以重写抽象方法, 也可以不重写,还可以用抽象方法覆盖(重写)父类的普通方法,【普通类继承抽象类中抽象方法后 不重写会破坏普通类不能有抽象方法的规则,但是改为抽象类后不会有这种情况】
public abstract class Animal { //抽象方法必须在抽象类中,否则会报错
public static void main(String[] args) {
//
Animal a=new Animal();
Animal r=new Rabbit();
r.run();
会报错,因为抽象类不能实例化
}
public abstract void run(); //抽象方法
public abstract void sleep(); //抽象方法
public void eat() {
}
}
//可以有普通方法
System.out.println("eating")
二、包装器类
- 面向对象中,"一切皆为对象",但是基本类型不符合这样概念,所以把基本类型包装成类的样子
- 包装类主要用于不同类型间的转换
- 基本类型:byte,short,int,long,float,double,char,boolean
- 对应包装类型 :Byte,Short,Integer,Long,Float,Double,Character,Boolean
Integer a=2;
int b=a;
String c=String.valueOf(a);
Integer d=Integer.valueOf(c);
int e=Integer.valueOf(c); //或者int e=Integer.valueOf(c).intValue();【基本类型和包装类
可以自动转】
String f=String.valueOf(b);
System.out.println(a+""+b+""+c+""+d+""+e+""+f);
Integer的128陷阱
为了节省空间,当valueOf里传的值在-128到127之间时不会创建新对象,而是指向数组中存储该数的地
址,否则会new一个对象,相同内容会存储在不同地方,==对比的是地址,所以127往上会返回false
更详细包装器类和128陷阱的知识可以看下方链接