《 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,但是不能抓换为对象数组

版权声明:本文为博主原创文章,未经博主允许不得转载。

posted @ 2015-08-28 14:09  Thereisnospon  阅读(160)  评论(0编辑  收藏  举报