本周在老师的讲解下我可以找到自己之前自学遗漏的细节以及易混淆的概念,自学后再经老师讲解,很多问题就迎刃而解了。比如在老师讲解后我对继承又有了更多认识:
1.父类:
1)Java中一个类可以有多个子类,但一个类只能有一个父类,父类也可以有父类,即支持所谓的单继承和多层继承,但不能多继承。
2)Java里的所有类都拥有Object类的方法和属性。由于方法和属性被子类继承,很多方法被子类重写,常用的有:
toSrting:该方法返回对象的字符串表示,通过在子类重写后显示出类的相关信息;
equals:通过在子类中重写后比较两个对象是否相等;
hashcode:返回对象的散列码,散列码没有规律。
2.子类:
1)内存形式:内存叠加
2)在继承时,子类可以继承父类的所有属性和方法,但是不能继承父类的构造方法,即父类的构造方法不能重写。
3)super(当前对象的父类):
- 放在构造方法的第一行
- 调用构造器时,格式为super(),调用父类中制定的构造器
- 调用普通方法和属性时,格式为super,同时只能为父类的属性和方法。
- 当子类在重写父类的方法,如果要调用父类的该方法,就必须用super关键字
4)this(当前对象):
- 放在构造方法的第一行
- 调用构造器时,格式为this(),调用本类中一个本类的构造器
- 调用普通方法和属性时,格式为this父类/子类的属性/方法
- 当子类在重写父类的方法,如果使用this关键字,则调用的是本类的该方法
3.final:
1)变量:表明该变量不能被修改,即常量。
2)类:表明该类不能被继承,是最终类,即该类不能有子类。同时,如果是声明为最终类一般都是在class关键字前加上final
3)方法:表明该方法不能被重写,如果将该方法声明为最终方法,一般都将final放在访问修饰符后面,返回值之前。
4.对象初始化:
1)在对象初始化阶段,属性和方法均针对子类可以从父类继承过来的属性和方法而言,一般而言,都是针对父类中非private而言的。因为private修饰的为父类所特有的,子类没有继承过来,当new子类时,无须为其分配空间并执行初始化。当然了,父类的构造器子类也是不继承过来的,但构造器另当别论。
2)类的初始化只执行一次,当对同一个类new多个对象时,类属性和类初始化块只初始化一次。
5.继承中的隐藏:
Java类具有三种访问控制符:private、protected和public,同时当不写这三个访问控制符时,表现为一种默认的访问控制状态。因此,一共具有四种访问控制级别。具体访问控制表现如下:
1)private修饰的属性或方法为该类所特有,在任何其他类中都不能直接访问;
2)default修饰的属性或方法具有包访问特性,同一个包中的其他类可以访问;
3)protected修饰的属性或方法在同一个中的其他类可以访问,同时对于不在同一个包中的子类中也可以访问;
4)public修饰的属性或方法外部类中都可以直接访问。
当子类继承父类,子类可以继承父类中具有访问控制权限的属性和方法(一般来说是非private修饰的),对于private修饰的父类所特有的属性和方法,子类是不继承过来的。
当子类需要改变继承过来的方法时,也就是常说的重写父类的方法。一旦重写后,父类的此方法对子类来说表现为隐藏。以后子类的对象调用此方法时,都是调用子类重写后
的方法,但子类对象中想调用父类原来的此方法时,可以通过如下两种方式:
1)将子类对象类型强制转化为父类类型,进行调用;
2)通过super调用。
同样的,如果在子类中定义父类中相同名称的属性时,父类属性在子类中表现为隐藏。