继承
在面向对象中,可以通过扩展一个已有类,并继承该类的属性和行为,来创建一个新的类,这种方式称为继承(子类指向父类)
语法:public class 子类 extends 父类{
如何判断类具有继承关系:
1. has - a (组合)
2.is - a (继承).
使用extends 关键字实现继承关系
Eployee 父类(又叫基类)
Hourly 子类 (又叫派生类)
基类可以有多个子类。可又叫超类。列:Object;
继承的优点
1.代码的可重用性
2.父类的属性和方法用于类
3.子类可以扩展父类的属性和方法
4.设计应用程序时变得更加简单
*扩展*
*Java中一个类只能有一个类,在某些OOp语言如C++中允许子类有多个父类*
*Object是所有类的超类,后面是共有的9个最常用的属性。需全部记住。*
*不是引用类型都不能用“= =”,而是应用类型所指向的“引用”业务相比较,“= =”判定两个引用是否指向同一个对象,equal.()是判定两个对象在业务上相等*
方法重写
子类将父类继承的方法再实现一次,叫做方法的重写,当我们打印对象或对对象进行字符串的操作就在调用toString来于Object的toString返回的全类名+十六进制数
当然我们可以根据自己的需要重写toString
方法重写规则---从父类继承而来的方法,子类重新实现(重载不要返回类型,只要求方法名一致)
1.方法名必须保持一致
2.参数列表必须保持一致
3.返回类型必须保持一致
4.访问修饰符必须大于等于父类
5.子类重写后的方法不能抛出比父类重写前的方法更多的异常
6.构造方法不能被继承,也没有重写,可以重载
this. 和 super.,this()和super()的区别:
this.指代当前对象能操作定义在本类上的属性方法
能操作定义当前对象的父类上的被访问修饰符允许访问的属性方法
super.指代当前对象的父类部分
不能操作定义在本类的属性和行为。
能访问定义在父类上的被允许访问的属性和方法
只有当本类中调用被重写方法之前的效果时使用super.其他时候都使用this。
this()指调用本类的其他构造,只能写在构造中,且必须是第一行
super()值调用父类指定的构造方法,只能写构造中且只能写在构造方法中第一句
super()如果不写会默认调用父类的无参构造
// 面试题:调用一个无参构造方法,让子类和父类的都执行一遍
public Class Father(){
public Father(){
this(1);
System.out.pritln("在父类的构造函数中 1");
}
public Father(int a ){
this (0,a)
System.out.pritln("在父类的构造函数中 2");
}
public Father(int a ,int b){
System.out.pritln("在父类的构造函数中 3");
}
}
public Class Son(){
public Son(){
this(1);
System.out.pritln("在子类的构造函数中 1");
}
public Son(int a ){
this(1,a);
System.out.pritln("在子类的构造函数中 2");
}
public Son(){
System.out.pritln("在子类的构造函数中 1");
}
}
public Class Test(){
public void main (String [] args){
Son s = new Son();
}
final 关键字
当我们用final 来修饰一个类时,该类不能被继承 (叫做最终态/终态类)
方法被final修饰该方法也不能被继承,(修饰构造方法无意义,构造方法不能被继承)
final使用的几种情况
finalize()是一个方法名不是关键字,是Object的方法,用来销毁对象方法,由GC回收调用
toString()返回一个对象的字符串的描述,使用机制为:
public String toString(){
return this.name +"住在"+this.address;
}