继承在面向对象中,可以通过扩展一个已有类,并继承该类的属性和行为,来创建一个新的类,这种方式称为继承(子类指向父类)语法: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; }