认识Java的API
ArrayList
ArrayList是java函数库的一个类。
ArrayList不能存primitive主数据类型,但是可以用包装类包装一下就行,而且java5之后自动进行包装。
ArrayList与数组的区别:
1、创建不用指定大小
2、插入不用指定位置
remove indexof add isempty
布尔表达式
短运算符(&&)
下面是一个小技巧,可以避免调用内容为null的指针变量的方法
if(refvar != null && refvar.isVaildType()){ //执行操作 }
长运算符(&,|)
通常用来做位的运算
使用函数库(Java API)
要使用API中的类,你必须知道它被放在哪个包中。
必须指明程序代码中使用的类的完整名称,可以有两种方法:
Import:例如:Import java.util.ArrayList
Type 或者在代码中声明,太麻烦了
包的一个重要作用就是错开相同命名的类,可以通过不同的包名来区分
javax开头的包,以前是拓展,现在是标准了
不必import进String类或System类:因为java.lang是个预先被引用的包。这俩是独一无二的class
继承与多态
继承(extends)
继承的关系意味着子类继承父类的方法。当我们提及类的“类的成员”,意思是实例变量和方法。
子类的方法可以对父类的方法进行覆盖override
子类方法的调用一定是调层次树最下端的
A是B的父类,B是C的父类,那么A是C的父类
关于判断继承设计是否是正确的,要使用IS-A(感觉还是不太懂啊)
子类中打算引用父类的方法然后再加上额外的行为:
public void roam(){
super.roam(); //程序会先执行super版的roam()然后再回来执行sub版自定义的行为或功能
//my own roam stuff
}
继承让你可以确保某个父型之下的所有类都会有父型所持有的全部方法
多态
在多态下,引用与对象可以是不同的类型。
Animal mydog = new Dog();//引用变量的类型是Animal,而对象是Dog
运用多态时,引用类型可以是实际对象类型的父类
参数和返回类型也可以是多态!
一个类不能被子类继承:(内部类、3种方法)
1、存取控制,不标记公有,这样只能被同一个包的类继承
2、使用final修饰符,表示继承树的末端,不能被继承
3、让类只拥有private的构造程序
覆盖
如果你希望类里的特定方法不能被覆盖,可以加上final修饰符
覆盖:方法必须和父类有相同的参数和返回值类型或其子类,不然无法覆盖;方法的存取权限也必须相同或者更为开放,不能把公有的声明为私有的。
重载(overload)
重载的方法只是刚好有相同的名字的不同的方法,与继承或多态无关。
返回类型可以不同,只要使用的不同的参数即可。
可以更改存取权限,
深入多态
抽象类
关键词abstract
抽象类代表没有人能够创建出该类的实例,除了被继承过,就没有其他的用途了
抽象的方法:代表此方法一定要被覆盖过。抽象的方法没有实体!如果你声明了一个抽象的方法,那么该类也必须标记为抽象的。你不能在非抽象类中拥有抽象的方法。
子类必须实现父类的抽象方法
Object
所有类都是从Object中继承出来的
没有直接继承过其他类的类会是隐含的继承对象。
Object不是抽象类
Object类主要有两个作用:1、多态,让方法可以应付多种类型的机制;2、用在线程的同步化上面
任何从ArrayList<Object>取出的东西都会被当做Object类型的引用而不管它原来是什么,但是可以强转回来
接口(关键词:interface)
java的接口的所有方法都是抽象的,
接口解决了java不允许继承多个父类的问题
不同的继承树的类可以有相同的接口
类可以实现多个接口
super关键字可以让子类调用父类的方法