java学习-4
方法重载
重载就是在一个类中,有相同的函数名称,但是形参不同的函数
方法重载的规则
- 方法名相同
- 参数列表必须不同(编译器以此来选择相对应的方法)
- 方法的返回类型没有要求
理论: 方法名相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法。
可变参数(不定项参数)
jdk1.5开始,Java支持传递同类型的可变参数
在方法声明中,在特定参数类型后加上一个省略号(...)
在一个方法中只能指定一个可变参数,他必须是方法的最后一个参数。任何普通参数必须在他之前声明
public class Main {
public static void main(String[] args) {
//this.test(1,2,3,4);静态方法中没有this关键字
Main main = new Main();
main.test(1,2,3,4);
}
public void test(int... i){
System.out.println(i[0]);
System.out.println(i[1]);
System.out.println(i[2]);
System.out.println(i[3]);
}
}
数组
相同类型数据的有序集合
数组的创建
dataType[] arrayRefVar; //首选方法
dataType arrayRefVar[]; //效果相同,但不是首选方法,类似C语言
Java语言使用new操作符来创建数组
dataType[] arrayRefVar=new dataType[arraySize];
数组长度
arrayRefVar.length
三种初始化
静态初始化
int[] a={1,2,3};
Man[] mans={new Man(1,1),new Man(2,2)};
动态初始化
int[] a=new int[2];
a[0]=1;
a[1]=2;
数组的默认初始化
数组是引用类型,他的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化
数组工具类——Arrays
Arrays.toString(a);//打印数组元素
Arrays.sort(a);//升序排序
Arrays.fill(a,0)//数组赋值为0
...
面向对象
构造器
相当于C++的构造函数,没有返回值,也不能写void,一个类不写也会存在一个构造方法
定义了有参构造,如果还需要使用无参构造就需要显示无参构造
继承
java中类只有单继承,没有多继承
继承是类和类之间的一种关系,除此之外,类和类之间的关系还有依赖、组合、聚合等。
super
子类通过super访问父类
调用父类的构造器必须在子类的第一行
//父类
public class person(){
public person(){
}
}
//子类
public class man(){
public man(){
super();//必须在子类构造器的第一行
}
}
注意点
- super调用父类的构造方法,必须在构造方法的第一个
- super必须只能出现在子类的方法或者构造方法中
- super和this不能同时调用构造方法
Vs this:
代表的对象不同:
- this:本身调用者这个对象
- super:代表父类对象的应用
前提
- this:没有继承也可以使用
- super:只能在继承条件下才可以使用
构造方法
- this(): 本类的构造
- super():父类的构造
方法的重写
子类重写父类的方法,且方法不能是静态方法
- 方法名要相同
- 参数列表必须相同
- 修饰符:范围可以扩大
- 抛出的异常:范围可以被缩小,但不能扩大
多态
- 动态编译:类型可扩展、
- 同一方法可以根据发送对象的不同而采用多种不同的行为方式
- 一个对象的实际类型是确定的,但是可以指向对象的引用的类型有很多
多态存在的条件
- 有继承关系
- 子类重写父类方法
- 父类引用指向子类对象
多态是方法的多态,属性没有多态性
//一个对象的实际类型是确定的
//new Student();
//new Person();
//可以指向的引用类型就不确定了,父类的引用指向子类
Student s1=new Student();
Person s2=new Student();
Object s3=new Student();
//对象能执行哪些方法,主要看对象左边的类型,和右边关系不大
多态的注意事项
- 多态是方法的多态,属性没有多态
- 父类和子类,有联系
- 存在的条件:继承关系,方法需要重写,父类引用指向子类对象
instanceof
instanceof 左边显式声明的类型与右边操作元必须是同种类或存在继承关系,也就是说需要位于同一个继承树,否则会编译错误
抽象类
abstract
- 不能new这个抽象类,只能靠子类去实现他
- 抽象类中可以写普通的方法
- 抽象方法必须在抽象类中
- 抽象方法只有方法名字,没有方法的实现
接口
接口:只有规范
interface 定义的关键字
接口中的所有的定义都是抽象的
类可以实现接口 implements,接口可以多继承
public class UserServiceImpl implements UserService,TimeService{
}
内部类
public class Outer{
private id=10;
public void out(){
System.out.println("这是外部类的方法");
}
public class Inner{
public void in(){
System.out.println("这是内部类的方法");
}
//获得外部类的私有属性
public void getID(){
System.out.println(id)
}
}
//局部内部类
public void method(){
class Inner{
}
}
}

浙公网安备 33010602011771号