今日主要学习封装和继承,其中涉及到方法的重载(overload)和方法的重写(override)

权限访问修饰符
Java语言采用访问修饰符来控制类和类中方法和变量的访问权限,从而向使用者暴露接口,但隐藏实现细节
访问修饰符有三个:分别是public(共有的)、protected(受保护的)、private(私有的)
访问权限的级别有四个:分别是public(共有的)、protected(受保护的)、friendly(default)(默认不写的)、private(私有的)
public(公有的):包内外的所有类都可以使用(任何)
protected(受保护的)包内任何类和包外继承它的子类
friendly(default)(默认不写的)只有在同一个包下的类才可以使用
private(私有的)只有在本类才可以使用,其他类都不能访问
权限修饰符说明
public和默认的friendly可以修饰类、属性、方法;但是private和protected只能修饰属性和方法,不能修饰类

2. 封装

封装是把方法和属性单独存储起来,访问里面的内容只能通过预留的接口;封装是隐藏对象的属性和实现细节,仅提供对外提供公共访问方式。
封装的好处:1.对象的数据封装特性彻底消除了传统结构方法的中数据与操作分离所带来的种种问题,提高了程序的可复用性和可维护性,降低了程序员保持数据和操作内容的负担(代码复用)2.对象的数据封装特性还可以把对象的私有数据和公共数据分开,保护了私有数据,减少了可能的模块间干扰,达到降低程序复杂性,提高可控性的目的。(提高安全性)
封装的方法:
1.修改属性的可见性来限制对属性的访问(一般限制为private)
2.对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问
3.使用方法:

private    数据类型A    数据名Z;
public void 设定值(数据类型A 数据名Z){this.Z=Z;}/*默认为set方法*/
public A 获取值(){return Z;}/*默认为get方法*/

3. 方法的重载(overload)

一般用于在同一个类内实现若干重载的方法,这些方法的名称相同而参数列表不同,即同一类中方法名相同、参数列表不同时,可以使用方法重载。

  • 重载的作用:代码可以重用,利于后期的维护。构造方法和自定义构造方法都是以重载的形式存在的
  • 重载的规则:在使用重载时只能通过相同的方法名,不同的参数形式实现,可以是不同的参数类型,个数不同,不能通过访问权限、返回类型、抛出异常进行重载,方法的异常类型和数目不会对重载造成影响

4. 继承

继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能但不能选择性地继承父类。这种技术使得复用以前的代码非常容易,能大大缩短开发周期,降低开发费用。使用继承特性编写程序时,可大量节省开发时间,轻松完成复杂的代码。一个类只能继承一个类,不能同时继承多个类

  • 为什么用继承:继承的出现提高了代码的复用性,少写代码
  • 继承的写法:A类继承B类:class A extends B可以允许,多重继承,即子继承父,父继承爷,他们是逐级继承,实现时也是逐级实现。
    继承示意图
  • 为什么要继承:继承后,A类可以使B类中的所有属性和方法(private和friendly除外),私有的类不能继承,默认的friedly在同包下可以。
  • 继承特点:子类继承父类,子类创建对象时,先创建一个父类的对象,创建对象时,因为先创建父类的对象,所以会先执行父类的默认构造方法,才会执行子类的默认构造方法
    如果没默认的无参构造方法需要手动调用父类中其他的构造方法,用super关键字来调用父类中的资源,调用父类中的构造方法用super([参数列表]);来实现。

5. 方法的重写(override)

  • 什么是方法的重写:当子类中与父类有重名的方法时、相同返回值、参数列表也相同、并且访问权限>=父类中的方法,子类中的方法覆盖父类中的方法,此时称为子类中的方法把父类中的方法重写了。
  • 重写的意义:子类通过方法的重写可以隐藏继承的方法,子类通过方法的重写可以把父类的状态和行为改变为自身的状态和行为。如果父类的方法f和属性可以被子类所继承,子类就有权利重写父类中的方法f和属性,此时从子类中调用方法f,一定是重写后的方法f;父类中的方法f和属性此时被隐藏起来了。
  • 重写的作用:重写可以操作继承的成员变量,调用继承的方法也可以操作子类新生名的成员变量、调用新定义的方法。
  • 怎样调用已经被重写的父类方法:当已经重写时,需要用super关键字来调用已经被重写的父类资源。但不能在除子类之外的其他类调用。
  • 重写的格式:
    class A{
      public void show(){输出A}
    }
    class B extends A{
      public void show(){输出B}
    }
    此时调用B类的show方法输出的就是B
  • 如果父类中的方法被重写了,外界还想要父类中的方法和子类中的方法共存,需要在子类中重新写一个不同名字的方法,方法体中写super.方法;因为重写后,在子类中用super.方法调用重写前的方法,这是实现重写前的父类方法的最后一次机会,此时在子类中就可以实现重写前和重写后的两种方法

6. this关键字和return语句

  • return语句:无返回值的方法中使用return语句,只起跳出作用,return语句会跳出方法外,立即结束方法的执行,有返回值的方法中最后要加上return语句告诉调用方法的地方,执行完后有什么返回值,在return语句后编写语句会报错。
  • this关键字:表示当前的虚拟对象。
    意思是如果这个类创建了对象,代表这个对象。this.Z表示当前类对象的Z属性,即使不写this,正常也管用。
    如果方法中出现同名的变量,类中的变量会被覆盖,需要用this.属性的格式来访问类中的属性
    this.调用方法代表当前对象中的方法。
    多用在类变量和成员变量重名、子类和父类有相同的方法名、属性名时候,用this关键字来区分是哪个对象的属性或方法。