Java学习随笔
抽象类:不能被实例化,其余与普通的类没什么区别.它只能被另一个类继承,然后可以实例化继承抽象类的类,继而调用抽象类中的方法;
抽象方法:抽象方法必须在抽象类中,继承这个抽象类的类必须重写这个抽象方法,除非这个子类被声明为抽象的.然后这个子类如果别其他的类继承,也必须实现最开始的抽象类中的抽象方法,否则也无法实例化.
抽象类不一定包含抽象方法,但是抽象方法一定要在抽象类之内
抽象类中的抽象方法只是声明,不给出具体的方法,方法要在抽象类被继承时重写实现
构造方法、类方法(static修饰的方法)不能被声明为抽象方法
重写:参数相同,返回类型可以不同(java 7 以后),但是必须是父类返回值的派生类;访问权限不能更低
声明为final的方法不能重写,声明为static的方法不能重写,但是可以被再次声明
构造方法不能被重写;如果不能继承一个方法,则不能重写这个方法。
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
最常用的地方就是构造器的重载(构造方法的重载)。
被重载的方法必须改变参数列表(参数个数或类型不一样);
被重载的方法可以改变返回类型;
被重载的方法可以改变访问修饰符;
被重载的方法可以声明新的或更广的检查异常;
方法能够在同一个类中或者在一个子类中被重载。
无法以返回值类型作为重载函数的区分标准。
接口:
接口无法被实例化,但是可以被实现。
一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类
接口没有构造方法。
接口中所有的方法必须是抽象方法。
接口不能包含成员变量,除了 static 和 final 变量。
接口支持多继承。
接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。
接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。
抽象类与接口的区别
抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
一个类只能继承一个抽象类,而一个类却可以实现多个接口。
接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。
接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键字。
接口中的方法都是公有的。
当类实现接口的时候,类要实现接口中所有的方法。否则,类必须声明为抽象的类。
类在实现接口的方法时,不能抛出强制性异常,只能在接口中,或者继承接口的抽象类中抛出该强制性异常。
类在重写方法时要保持一致的方法名,并且应该保持相同或者相兼容的返回值类型。
如果实现接口的类是抽象类,那么就没必要实现该接口的方法。
Java中的接口有什么作用?既然接口中的方法都要被实现,那么为什么不直接在欲实现接口的类中定这些方法,所以为什么要接口?
二维数组为什么是随机存取结构?查找二维数组中的一个元素的时间复杂度是o(1),为什么?
1 | int element[][] = new int[1][2]; |
字符串类型的日期转换为Date类型的日期
1 | import java.text.ParseException; |