重写
叫做override 子类中对父类方法重新实现
为什么重写?因为父类的方法逻辑不能满足子类的需求,子类需要修改逻辑
重写的特点:
- 子类只能重写父类中存在的方法;
- 重写时,子类中的方法名和参数要与父类保持一致。(区别于重载overload);
- 返回值类型:必须和父类方法的返回值类型相同,或者是其子类型。
- 访问权限:子类重写方法的访问权限必须大于等于父类方法的访问权限。
注解@Override:
这个注解,用在重写的方法之前,表示验证这个方法是否是一个重写的方法。如果是,程序没有问题。如果 不是,程序会报错。 因为我们在进行方法重写的时候,没有什么提示的,因此,在进行重写之前,最好加 上去这个注解。
误区:加了@Override就是重写,没有加@Override就不是重写。 这种说法是错误的! @Override只是进行的一个语法校验,与是不是重写无关。
面试题 : 简述 Override 和 Overload 的区别
Override:是重写,是子类对父类方法进行重新实现。
Overload:是重载,是对同一个类的同名、不同参数的方法的描述。
Object
Object类,是Java中的根类。所有的类都直接或者间接的继承自Object类。因为,所有的类都直接或者间接的继承自Object类,因此在Object类中定义的属性、方法,在所有的类中都有包含。 比如常用的方法 hashCode(),equals(),toString(),getClass(),wait(),notify(),notifyAll()等.
toString()方法 \
public String toString(){
return getClass.get.Name()+"@"+Inter.toHexString()hashCode());
}
作用是把对象的信息变成字符串,返回的是“类名@16进制” 意义不大,需要重写。输出语句中打印对象的变量时,会自动调用。
@Override
public String toString(){
return "Teacher{" +"name='" + name + '\'' +", age=" + age +", gender=" + gender +'}';
}
equals()方法
上述的源码的意义所在:比较this和传进来的obj 是不是同一个对象,如果是,则返回true,不是的话,返回false。
而我们大多时候的需求,并不是比较是不是同一个对象,而是比较两个对象的属性值是否相同。 因此:自定义类型时,应该重写eqauls方法。
重写遵循规则:
1、如果 obj = null,一定要返回false。
2、如果 obj = this,一定要返回true。
3、如果两个对象的类型不同,一定要返回false。
4、如果 a.equals(b) 成立,则 b.equals(a) 也必须成立。
5、如果 a.equals(b), b.equals(c) 成立,则 a.equals(c) 也必须成立。
hashCode()方法
该方法返回的是一个int类型的值。 表示对象在内存堆中的一个算法值。 在自定义类型时,一般都需要重写该方法
getClass()方法
方法原型 : public final native Class<?> getClass();
方法作用 : 获取一个用来描述指定类型的Class类对象。获取一个指定的对象的类型。 这个方法,不能被重写。
final修饰词
final修饰: 1. 修饰类,表示该类不能再有子类,即不能被继承了。 2. 修饰成员变量: 只能初始化一次,不能被再次赋值 3. 修饰方法: 表示该方法不能再被重写了。 4. 修饰局部变量:
static修饰词
static修饰的内容,都是属于公有资源,不属于对象,而是属于类的,因此都是类名调用
static修饰词 1. 修饰成员变量: 静态成员变量,属于类的,公共资源,使用类名.调用。 注意:可以使用引用变量.调用,但是不合理,因为不属于对象。 2. 修饰方法: - 静态方法,属于类的,公共资源,使用类名.调用。 - 注意:可以使用引用变量.调用,但是不合理,因为不属于对象。 - 静态方法中不能直接访问非静态成员。 - static方法不能被重写 ,但是子类可以提供和父类一样的静态方法,各是各的 3. 修饰代码块: - 静态代码块, 类加载时只执行一次。 通常用于加载静态资源:图片,音频等 4. 修饰类: - 可以修饰内部类。