1. extends来继承父类(超类,基类)
  2. 只要父类里面的变量或方法是公开(public)的就会继承下来
  3. 方法覆盖
  1. 在子类中写一个与父类的方法同名的方法
  2. 通过super.方法名 可以访问被覆盖掉的父类方法
  1. 父类的构造优于子类,所以构造器内写super是在最前面
  2. Father f=new Son()或new SonSon();//合法。这个叫多态,类的多种形态
  1. 这时只能调用father,son共有的方法
  1. Son s=new Father();//不合法
  2. 一个派生类只有一个父类,一个父类可以有多个派生类,所有类的父类是Object类
  3. 方法加上fianl不能被派生类重写(覆盖),类加上final不能被继承
  4. 强制类型转换(面试点)
  1. 条件:祖先类的引用=子孙类的堆中值的地址(子孙类对象地址)
  2. 强制类型转换的两个对象必须是直系关系,不能是旁系关系
  3. Father f=(Father) new Son();
  4. Father f=new SonSon();Son s=new Son();s=(Son)f;
  5.  A instanceof B:判断B是不是A的子孙类,判断适不适合强制类型转换的条件
  1. 抽象类:侧重于提取共性
  1. 因为子类可能会覆盖掉父类的方法,所以父类只提供方法名,方法内容由子类自己来编写实现
  2. 抽象类不能new自己,但是可以new数组。如果Person是抽象类,那么
  1. Person p=new Person();//不合法
  2. Person[] arr=new Person[2];//合法
  1. 抽象类和接口有什么共同点和不同点(面试点)
  1. Object,所有类都有这几种方法,因为其他类是Object类的子类(面试点)
  1. Equals
  1. 什么意思(object和String里面的作用都要说出来):比较两个对象的地址是否同一个地址;字符串里面比较的是字面量,不是字符串地址。==:在引用类型里指的是地址是否相等,基本类型里面指的是值是否相等。
  2. 如果重写equals注意什么?为什么?:如果重写equals的话一定要重写hashCode。因为hashmap进行计算的时候hashcode和equals合作。
  3. Hashmap中怎么用的:key值判断相等需要用到equals(),hashmap存储的时候需要用到hashcode(),key一样的对象会根据hashcode分配到同一个桶,
  4. String的hashcode根据字面量(编码值)进行计算
  1. getClass:获取类信息
  2. hashCode:不同对象hashCode基本上不会相同,但是有一定的小概率是相同的。两个对象的hashCode不同那么他俩一定是不同的对象。
  1. hash散列:没有规律但是比较均匀
  2. hashCode是根据内存地址生成的
  1. Notify:唤醒当前线程
  2. notifyAll:唤醒所有线程
  3. toString:返回该对象的字符串表示:输出对象的时候默认调用toString方法
  4. Wait:当前线程进入等待队列
  1. 泛型:广泛的代表所有类型
  1. 创建:public class Arr<TYPE>{public TYPE a;},TYPE不能是基本类型
  2. 声明:


1. Arr<String> arr1=new Arr<>();arr1.a="泛型";
2. Arr<Person> arr2=new Arr<>();arr2.a=new Person("AGI");
3. Arr<int[]> arr3=new Arr<>();arr3.a=new int[]{1,2,3,4};
  1. 对象包装器和自动装箱(面试点)
  1. 装箱:Integer a1=9时把int类型的9转换成Integer,这个叫装箱。也就是说基本类型转成包装类叫自动装箱。
  2. 拆箱:int b1=a1时把Integer转成int,这个叫拆箱。包装类型转基本类型叫拆箱。
  3. 什么是128陷阱?两个变量值在-128~127时直接引用常量池里面的值,超出这个范围则另外申请自己的存储空间,所以这两个变量的字面量在值相等并且范围在(-128~127)时用==比较会返回true,超出这个范围则返回false。
1.     
1. Integer a=12; Integer b=12;a==b->true
2. Integer a=128; Integer b=128;a==b->false
3. 超范围使用:a.intValue()==b.intValue()->true
  1. 可变参数方法
  1. Method(String … str)//可以传输0到n个参数,编译器最终把参数转换成数组
  1. 枚举类:定义了一个类,限定实例个数不能增加。