JAVA笔记【20131208】

一、抽象类

抽象方法:

所谓抽象方法,即只定义该方法,但不实现该方法,Java中使用关键字abstract表示该方法是抽象方法。

抽象方法其实就是相当于占坑的角色,就是先霸占着这位置,到底怎么实现这个方法,由以后的子孙类们去考虑。

public abstract String getDesc()
{
//无具体实现
}

包含一个或者多个抽象方法的类也必须被声明为抽象的,也即抽象类,同样使用关键字abstract修饰。

抽象类中除了有抽象方法之外,还可以有实例域和具体方法。

注:一个类即使其中没有抽象方法,也可以声明为抽象类。

抽象类不能实例化,也即不能创建该类的实例,但可以声明一个抽象类的对象变量,该对象变量可以引用该抽象类的非抽象子类。

abstract class Person
{
	public abstract String getDesc()
	{
		//未实现
	}
	//...........
}

class Student extends Person
{
	public String getDesc() //实现了父类的抽象方法
	{
		return name ;
	}
	//............
}

Person tempP = new Person(); //报错,不能实例化抽象类
Person tempH = new Student(); //正确,声明Person对象变量tempH,指向Person类的非抽象子类Student

二、访问控制

1、private ------- 仅对本类可见

2、public  ------- 对所有类可见

3、protected ----- 对本包和所有子类可见

4、默认    ------- 对包可见(默认不推荐)


三、Object:所有类的超类

Java中除了基本类型的值不是对象之外,其余的都是对象,扩展于Object类。

equals方法:

Object类中equals方法用于检测一个对象与另外一个对象是否相等,在Object类本身中,equals方法用于判断两个对象是否具有相同的引用。如果两个对象具有相同的引用,则肯定相等。

对于类,经常会遇到比较两个对象状态,来判断是否相等,因此可以重写equals方法。

Class Employee
{
	public boolean equals(Object objs)       //重写Object类中equals方法
	{
		if(this == objs)     //首先判断两个对象引用是否相同,引用相同,则肯定相同
			return true ;
		if(objs == null)     //其次判断对象是否为null,为null就不相等
			return false;
		if(this.getClass() != objs.getClass())   //判断两个对象类型是否一致
			return false;                          //此处不能使用instanceof判断,因为instanceof可能是该类的子类的情况下,也可以转换
		Employee TempE = (Employee) objs ;       //将类型转换为Employee
		return name.equals(TempE.name);
	}
	
	public boolean equals(Employee emp)        //这种方法并未重写Object类中的equals方法,而是定义了一个完全无关的方法。
	{
		return name.equals(emp.name);
	}
}

hashCode方法:

hashCode是由对象导出的一个整型值。hashCode本身是无规律的,两个不同的对象,一般hashCode值也不同,但两个相同的对象,其hashCode值必然相同

hashCode方法定义在Object类中,因此每个对象都有一个默认的hashCode值

如果重新定义equals方法就必须重新定义hashCode方法,如果两个对象equals为true,则两个对象的hashCode值也必须相等。

Class Employee
{
	public boolean equals(Object objs)       //重写Object类中equals方法
	{
		//..............................
	}
	
	public int hashCode()                      //重写Object类中hashCode方法
	{
		return 100*name.hashCode();
	}
}

toString方法:

Object类中的toString方法用于返回表示对象值的字符串。其默认返回的是对象所属类名和hashCode

大部分toString方法遵循这样的格式:类名[域值|域值]

Class Employee
{
	public String toString()
	{
		return getClass().getName()
		  + "[name="+name+"id="+id+"]" ;
	}
}

建议为自己的类都重写toString方法。

例:

public class Test22
{
	public static void main(String[] args)
	{
		Employee[] staff = new Employee[3];
		staff[0] = new Employee("zhangs",100);
		staff[1] = new Employee("lisi",200);
		staff[2] = new Employee("lisi",300);
		
		System.out.println(staff[0].toString());
		System.out.println(staff[1].hashCode());
		System.out.println(staff[2].hashCode());
		System.out.println(staff[1].equals(staff[2]));
	}
	
}

class Employee
{
	public Employee(String name,int id)
	{
		this.name = name;
		this.id = id;
		nextId++;
	}

  public boolean equals(Object objs)   //重写Object类中的equals方法
  {
  	if(this == objs)
  		return true;
  	if(objs == null)
  		return false;
  	if(this.getClass() != objs.getClass())
  		return false;
  	Employee tempE = (Employee) objs;
  	return name.equals(tempE.name); 
  }

	public int hashCode()               //重写Object类中的hashCode方法
	{
		return 100*name.hashCode();
	}
	
	public String toString()            //重写Object类中的toString方法
	{
		return getClass().getName()
		  +"[name="+name+" id="+id+" nextId="+nextId+"]";
	}
	
	public String getName()
	{
		return name;
	}

	public void setName(String name)
	{
		this.name = name;
	}

	public int getId()
	{
		return id;
	}

	public void setId(int id)
	{
		this.id = id;
	}
	
	public static int getNextId()
	{
		return nextId ;
	}
	
	private String name;
	private int id;
	private static int nextId = 0; 
}

输出结果:







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值