子类重写父类方法后,子类方法的权限修饰符要大于等于父类方法的权限修饰符
类名作为参数和返回值、抽象类名作为参数和返回值
类名作为形参和返回值
1.方法的形参是类名,其实需要的是该类的对象
2.方法的返回值是类名,其实返回的该类的对象
抽象类名作为参数和返回值
1.方法的形参是抽象类名,其实需要的是该抽象类的子类对象
2.方法的返回值是抽象类名,其实返回的是该抽象类的子类对象
接口名作为形参和返回值
1.方法的形参是接口名,其实需要的是该接口的实现类对象
2.方法的返回值是接口名,其实返回的是该接口的实现类对象
内部类
就是在一个类中定义一个类。
举例:在一个类A的内部定义一个类B,类B就被称为内部类
--------
内部类的定义格式:
public class Name{
修饰符 class Name{
}
}
范例:
public class Outer{
private int num=10;
private class Inner{
public void show(){
sout(num);
}
}
public void method(){
Inner i=new Inner();
i.show();
}
}
内部类的访问特点:
1.内部类可以直接访问外部类的成员,包括私有
2.外部类要访问内部类的成员,必须创建对象
--------
按内部类在类中定义的位置不同,可以分为如下两种形式
1.在类的成员位置:成员内部类
2.在类的局部位置:局部内部类(成员方法中定义)
---------
成员内部类,外界如何创建对象使用?
范例:Outer.inner oi =new outer().new Inner();
局部内部类
是在方法中定义的类,所以外界是无法直接使用,需要在方法内部创建对象并使用
该类可以直接访问外部类的成员,也可以访问方法内的局部变量。
匿名内部类(局部内部类的一种特殊格式;本质,匿名对象)
前提:存在一个类或者接口,这里的类可以是具体类也可以是抽象类(抽象类居多)
格式:
new 类名或者接口名(){
重写方法
};
范例:
new Inter(){
public void show(){
sout("匿名内部类");
}
}.show();
Inter 是抽象类名或接口名
本质:是一个继承了该类或者实现了该接口的子类匿名对象
改进:(多态的使用原则)
Inter i=new Inter(){
public void show(){
sout("匿名内部类");
}
}
i.show();
--------
匿名内部类在开发中的使用
减少工程中的简单类;
jo.method(Jumping j); //此处需要的是接口的实现类
jo.method(new Jumping(){ // 在此处可以使用匿名内部类对象
@Override
public void jump(){
sout("猫可以跳高了");
}
});
常用API
已经学习了 stringstringBuilderScannerRandom,提高开发效率
--------
Math类概述
包含执行基本数字运算的方法
没有构造函数,不能被实例化,字段与方法都是静态修饰的,使用类名可以直接调用。
abs(), ceil(), floor(), round(), max(),min(),pow(),random()
--------
System类概述
不能被实例化,使用类名调用方法。
exit() 参数0表示正常中止
long currentTimeMillis() 返回当前时间(距1970.1.1的毫秒时间)
整数相除,只能得到整数
计算程序运行时间
--------
以上都是私有的无参构造方法
Object类
Object是类层次结构的根,每个类都可以将Object作为超类。所有类都直接或间接继承自该类
构造方法:public Object()
为什么子类的构造方法默认访问父类的无参构造方法?
因为他们的顶级父类只有无参构造方法。
--------
equal(): 比较对象是否相等,默认比较地址,重写可以比较内容,自动生成。
toString(): 返回对象的字符串表示形式,建议所有子类重写该方法,自动生成。
--------
Arrays
冒泡排序
n个数据进行排序,需要做n-1趟排序
每一次比较完毕,下一次比较就会少一个数参与
若一次排序中,所有数据未发生交换,则所有数据已经从小到大排列好(大小递推可知)
Array类包含用于操作数组的各种方法
public static String toString(int[] a) 返回指定数组的内容的字符串表示形式
public static void sort(int[] a) 按照数字顺序排列指定的数组
内部有一个私有的无参构造方法
工具类的设计思想:
构造方法用private修饰
成员用public static修饰
基本类型包装类
判断一个数是否在int范围内?-2^31 ~ 2^31-1
Integer.MIN_VALUE
Integer.MAX_VALUE
基本类型包装类概述
将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据
常用的操作之一:用于基本数据类型与字符串之间的转换
基本数据类型 | 包装类
byte | Byte
short | Short
int | Integer
long | Long
float | Float
double | Double
char | Character
boolean | Boolean
--------
Integer
包装一个对象中的原始类型int的值
public Integer(int value) 根据int值创建Integer对象 已过时
public Integer(String s) 根据String值创建Integer对象 已过时
public static Integer valueOf(int i) 返回表示执行int值的Integer实例
public static Integer valueOf(String s) 推荐使用后两种静态方法
使用:
Integer i1=new Integer(100);
Integer i1=new Integer("100");
Integer i2=Integer.valueOf(100);
Integer i2=Integer.valueOf("100");
int String相互转换
int转String
--------
int num=100;
String s1=""+num;
--------
String s2=String.valueOf(number);
--------
String转int
--------
String s="100";
Integer i=Integer.valueOf(s);
int num=i.intValue();
--------
int num=Integer.parseInt(s);
P204字符串中数据排序
需求:有一个字符串:"91 27 46 38 50",请写程序实现最终输出结果是:"27 38 46 50 91"
思路:
1.定义一个字符串
2.把字符串中的数字数据存储到一个int类型的数组中
.得到字符串中的每一个数字数据
public String[] split(String regex)
.定义一个int数组,把String[]数组中的每一个元素存储到int数组中
public static int parseInt(String s)
3.对int数组进行排序
4.把排序后的int数组的元素拼接成一个字符串,这里拼接采用StringBuilder实现
自动装箱和拆箱
装箱:把基本数据类型转换为对应的包装类类型
Integer i=Integer.valueOf(100); 装箱
Integer ii=100; 自动装箱
拆箱:把包装类类型转换为对应的基本数据类类型
ii = ii.intvalue()+200; 拆箱
ii += 200; 隐含自动拆箱与自动装箱
包装类型就是 引用类型。
Integer iii=null;
if(iii){
iii+=300;
}
开发中,引用类型使用前要 判断是否为空。