JAVA 基础7-面向对象2

一.this关键字

指当前对象的引用,多数情况用来解决传入参数和成员变量重名的现象;

例如在类中定义了setName方法,将方法的参数值赋予类中的成员变量:

public void setName(String name){

  this.name = name;

}

this()指调用当前类中其他的构造方法;但在无参构造方法中使用this调用有参构造方法时,this需要写在无参方法中的第一句。

二.static关键字

当两个类共享一个变量时,需要用到static修饰,static表示静态的,可以修饰变量,常量,方法,类。

格式:类名.静态类成员

1.修饰变量或常量时存储在数据区,而不是栈或堆中;不管实例化多少个对象, 所有的对象都共享一份;static修饰的变量在访问的时候不需要实例化, 直接拿类名去点出来。

2.在修饰方法时因不需要实例化,使用较方便,常作为工具类使用。

3.静态方法不能访问非静态成员,不能使用this关键字

4.在静态方法中不实例化一个对象时静态方法中需要调用的变量和方法都必须是静态的;在静态方法中实例化一个对象时,该实例化的对象中的变量和方法都不需要静态的。

三.final关键字

意思为最终的,代表常量

1.修饰变量时变为常量,只能被赋值一次,且在定义时必须赋值,变量名需要大写;

2.修饰方法时不能被重写;

3.修饰类时不能被继承;String类自带final;

四.类的继承

继承是子类拥有父类的成员;

格式:修饰符(可选参数) class 子类名 extends 父类名{

  类体

}

JDK里定义的Object类默认是所有类的父类,所有对象(包括数组)都实现这个类的方法。

五.继承的重写(override/overwrite):体现了子类补充或者改变父类方法的能力;

重写的条件:
1. 必须要有继承 ;
2. 方法名相同;
3. 参数列表(参数类型, 参数个数一致);
4. 返回值类型相同;
5. 子类重写父类的方法不能使用比父类更为严格的访问权限;

六.toString 方法的重写

当需要输出对象的时候,程序自动调用toString()方法,这个方法是继承了父类的方法。由于返回值不易读懂,当需要通过返回对象显示此对象的信息时,需要重写此方法;

引用API文档描述:

public String tostring()
返回该对象的字符串表示。通常, toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。

Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:

getClass().getName() + '@' + Integer.toHexString(hashCode())
 

 包名.类名+@哈希码

返回:
该对象的字符串表示形式。

 在子类重写方法时,工作区左侧会出现三角标图形来表示,没有出现则不是重写方法;也可以用注解(@override/overwrite)让计算机判断是否为重写;

七.equals 方法的重写(快捷键:alt+shift+s)

此方法用于比较此对象是否与某个对象相等,这里举例说明,定义一个成员变量name:

@Override
public boolean equals(Object obj) {
  if (this == obj)						//如果两个对象指向的地址相同,返回true;(执行语句如果只有一句,{}可以省略)
	return true;
  if (obj == null)						//如果参数对象指向空,返回false;
	return false;
  if (getClass() != obj.getClass())		//如果两个对象不是同一类,返回false;
	return false;
  Dog other = (Dog) obj;					//将参数对象强转为同一类,用于判断对象的属性;
  if (name == null) {						//如果此对象没有名字,但参数对象有名字,返回false;
	if (other.name != null)
	  return false;
	} 
  else if (!name.equals(other.name)) //否则如果两个对象的名字不相等,返回false; return false;   return true; //其他情况返回true; } //当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。 @Override public int hashCode() {   final int prime = 31;   int result = 1;   result = prime * result + ((name == null) ? 0 : name.hashCode());   return result; }
原文地址:https://www.cnblogs.com/wyc1991/p/8992489.html