继承
类,子类(基类),超类(父类)
继承,其实也没什么难的;
将具体类写好以后,定义的新类如果想有这个类的样子作为模板,就可以通过继承;
在类名后面用 extends关键字 extends xxx(父类名),
先造的那个就是父类,后面通过前面那个继承的就是子类。
父类关键字supper();来使用父类的一切,这里的继承就和前面的封装就联系上了,三个访问控制符规定了两个类可以交互的内容还有交互的方式;
多态,多种形态
对象变量就是多态的;is-a置换法则表明每个子类的对象也是超类的对象;每个超类出现的地方子类也可以出现,但是反过来不行;即子类对象变量不能引用超类对象;
动态绑定
对象方法的执行过程,首先是系统寻找方法名(函数头指正)然后根据方法的属性,也就是参数类型确定具体的方法,然后进行执行;
虚拟机调用的是与当前x所引用的对象的实际类型最合适的那个类的方法,比如在子类中重载了方法,若调用了该方法,优先调用子类的该方法;
而且虚拟机对每个对象都建立了方法表;而且虚拟机会查找当前已经使用过的方法,如果新的另一个对象要求调用则可以使用这个;
强制类型转换
就是在要强制类型转换的属性,方法,对象之类的前面加()其中写要强制转换的类型;而且在强制转换的时候有时因为存储的方式不一样会导致错误;比如double的1.000转成int型的有时会变成零,因为两个的计数方式不一样;
还有个隐式类型转换,就是高精度往低精度,低精度往高精度做赋值运算的时候;
高往低转会精度丢失,低往高会补零;
抽象类
前面带有abstract的都是抽象的
也就是说只要声明是抽象类,就不能实例化;
抽象类,抽象方法;
当然在子类的实现过程中,如果子类定义了所有的抽象方法,则就不再会成为抽象类了,将可以实例化,但是如果只是定义了部分的抽象方法,则还是抽象类;
object,所有类的超类;
equals,比较对象的方法,相等测试;
哈希码
每个对象都有一个哈希值整数,相同的对象值是一样的;可以通过这个来比较;int hashCode();
tostring();获取对象的字符串,对象名加对象域,以字符串的形式体现;
还有就是java允许动态定义数组,即
int a;
Scanner in=new Scanner(System.in);
a=in.nextInt;
int [] b=new int[a];//数组长度为a;
泛型
就和c++的模板一样,允许各种未定义的统一的类型
Person<T>=new Person<T>();
泛型数组
ArrayList<T>()
ArrayList<T> a=new ArrayList<T>();
a.add(T);来添加元素;
a.size();元素个数;
a.trimToSize();削减容量;设置某一个元素a.set(i,object);获取某个元素a.get(i);插入a.add(n,object);删除a.remove(i);用foreach循环遍历;
tostring();转换成字符串
valueOf();转换成整型
parseInt();转换成整型
包装类,将具体类型包装成某个类;
Integer,Long,Float,Double,Short,Byte,Character,Boolen;
枚举类
enum xx{2,3,4,5,6,7,5}每一个枚举类都有一个静态value方法,返回所有元素;ordinal()返回元素位置;
反射
反射库十一个非常强大的工具集,javaBean中经常用到,通过其传入的参数,id等调用Bean;
能够分析类的能力的程序称之为反射;
在程序运行期间,java运行时系统始终为所有对象维护者一个称之为运行时的类型表示,这个信息追踪者所有对象的所属类,还有各种信息;
保存这种信息的类叫做Class;通常我们都是用的是返回类名
Class c=e.getClass();
c.getName();或e.getClass().getName();一般使用这个的时候都默认设置异常处理器;
throws Exception