《 JAVA 核心技术 基础知识》 第五章 笔记
继承:
子类不能访问超类 private 域
this 用途:
引用隐式参数
调用类的其他构造器
super 用途:
调用超类的方法
调用超类的构造器
子类对象可以赋给超类的变量,该变量可以根据子类的具体实现调用不同方法
不能将超类引用赋给子类变量,显而易见的例子,人是动物,但是动物不一定是人
方法重载时,会一一列举类中同名的方法,或是超类中public 的同名的方法。
子类方法不能低于超类方法的可见性
使用 final 修饰符,类 将不能继承,而方法则不能在子类重写
超类的引用赋值给一个子类变量必须进行强制类型转换,最好是在转换前判断是否能
够转换成功:
if(x instanceof Apple) { <span style="white-space:pre"> </span>y=(Apple)x; }
抽象类:
如果一个类继承自抽象类,除非自己本身也是抽象类,否则必须实现抽象类中所有的
抽象方法。
抽象类不能实例化,但是能够定义一个抽象类的对象变量,且只能引用非抽象类的对象。
如果在超类中没有定义一个方法,而是在它的子类中定义了一个方法,则用超类定义的
对象变量不能调用这个方法,编译器只允许调用在类中声明的方法。
访问修饰符:
private: 仅对本类可见,包括子类的其他类皆不可见。
public : 对所有类可见。
protected:对本包和所有子类可见。
默认:对本包可见
Object类:
如果没有明确指出超类,则默认继承自 Object类:
在java中除了基本类型不是对象,包括数组等,其他类型都扩展于 Object类
一个比较好的equals方法
public boolean equals(Object otherObject) { if(this==otherObject) return true; if(otherObject==null) return false; if(getClass()!=otherObject.getClass()) return false; Apple other=(Apple)otherObject; return name==other.name&&price==other.price; }
对于数组,可以使用Arrays.equals(type []a,type []b);判断
//如果子类没有实现equals方法
hashCode方法:
String 类型的hashCode方法由包含的类容导出,如果两个 String 的内容相同,则
hashCode应该相同,而 StrinBuffer 类型没有定义hashCode方法,将会由 Object类
默认的hashCode方法导出对象的存储地址
需要组合多个散列值时候,可以调用Object.hash提供过多个参数
public int hashCode() { return Objects.hash(name,salary,hireDay); }
equals 必须与 hashCode的定义一致,x.equals(y) 返回值应该与x.hashCode(y)相同
如果存在数组类型的域,可以使用Arrys.hsahCode()根据数组元素计算散列值
toString方法
只要对象与一个字符串通过 '+'连接起来,java将会自动调用toString方法Object类 定义的toString 方法返回类名和散列码
Arrays.toString(array);//打印数组 Arrays.deepToString(array);//打印多维数组
泛型数组列表
ArrrayList<Apple>array=new ArrrayList<Apple>(); boolean add(T obj) void ensureCapacity(int capacity);//确保数组不重新分配空间的的情况下的数量 trimTosize()//削减到当前尺寸 set(int index,T obj) get(int index)
对象包装器:
ArrrayList<Integer>list=new ArrrayList<Integer>();自动装箱:
list.add(3)将会自动转会按成list.add(Ingetger.valueOf(3));
自动拆箱:
int n=list.get(i) 会翻译成 int n=list.get(i).intValue();
Integer n=3;n++;
Integer:
int intValue() static String toString(int i,int radix)//指定进制转换成字符串 static Integer valueOf(String s,int radix)//从指定进制初始化为Integer static int parse(String s,int radix)//返回字符串表示的进制的数
可变参数方法:
如System.out.printf(String s,Object...objects);
枚举类:
public enum Size{ SMALL,MEDIUM,LARGE };
比较枚举类型值时可以直接使用==
有需要的话,可以在枚举类中添加构造器,方法和域,
整型数组int[]可以转换为Object,但是不能抓换为对象数组
版权声明:本文为博主原创文章,未经博主允许不得转载。