类的继承,方法覆盖,属性隐藏

每个对象只存储属性数据而不存储方法,方法只有一份;因为对于一个类的对象来说,方法都是相同的;

继承的语法:

  class 类名 extends 父类名{//方法体};

  子类不可以方法父类的私有属性及方法,但是可以通过公共方法进行访问;

属性的隐藏(被隐藏但是还存在)

  子类中声明了与超类中相同的成员变量名

    >从超类继承的变量将被隐藏;

    >子类拥有了两个相同名字的变量,一个继承自超类,另一个由自己声明;

    >当子类执行继承自超类的操作时,处理的是继承自超类的变量,而当子类执行它自己声明的方法时,所操作的就是它自己声明的变量;

访问被隐藏的超类属性

  调用从超类继承的方法,则操作的是从超类继承的属性

  本类中声明的方法使用“super.属性”访问从超类继承的属性

方法覆盖(静态方法不可以被覆盖,涉及到静态绑定)

  如果子类不需使用从超类继承来的方法的功能,则可以声明自己的同名方法,称为方法覆盖;

  覆盖方法的返回类型,方法名称,参数的个数及类型必须和被覆盖的方法一摸一样;

  只需在方法名面前使用不同的类名或不同类的对象名即可区分覆盖方法和被覆盖方法;

  覆盖方法的访问权限可以比被覆盖的宽松,但是不能更加严格;

  (public等访问控制权限,就好比如父类的一个方法在一个更大的范围内可以用,子类的这个方法不可以在某个父类可以用的情况下不能用了,这不符合抽象的概念,父类应该是子类的共同点的集合)

注意事项

  必须覆盖的方法:

    子类必须覆盖父类中的抽象的方法,否则子类自身也称为抽象类;

  不能覆盖的方法:

    基类中声明为final的终结类

    基类中声明为static的静态方法(设计到前期绑定,在此不做过多描述)

  

猜你喜欢

转载自www.cnblogs.com/mcmx/p/9119384.html