1、继承

1.1、说明:

  • 继承就是 java 允许我们用 extends 关键字,让一个类和另一个类建立起一种父子关系。

1.2、优势:

  • 提高代码复用性,减少代码冗余,增强类的功能扩展性。

1.3、继承的格式:

  • 子类 extends 父类

1.4、继承的特点

  • 子类 可以继承父类的属性和行为,但是子类不能继承父类的构造器(父类的构造器用于初始化父类对象)。

  • java 是单继承模式:一个类只能继承一个直接父类。

  • java 不支持多继承,但是支持多层继承。

  • java 中所有的类都是 Object 的子类。

1.5、继承需要满足的设计规范

  • 子类相同特征(共性属性、共性方法)放在父类中定义。

  • 子类独有的属性和行为应该定义在子类自己里面。

1.6、子类和父类中出现了重名,优先使用子类,如果一定要在子类中使用父类的属性,

  • 可以通过Super关键字,指定访问父类的成员。

1.7、继承后子类构造器的特点

  • 子类的全部构造器默认会先访问父类的无参数构造器在执行子类的构造器。

举例:

2、方法重写

1.1、说明:

  • 在继承体系中,子类出现和父类中一摸一样的方法声明,这个子类方法就是重写的方法。

1.2、应用场景:

  • 当子类需要父类的功能,但父类的该功能不完全满足自己的需求时。

  • 子类可以重写父类中的方法。

1.3、@Override注解作用:

  • 重写校验注解,加上之后,这个方法必须是正确重写的,编译阶段就报错提示。

  • 提高程序的可读性,代码更容易理解。

1.4、方法重写事项和要求

  • 重写方法的名称和形参列表必须与重写方法的名称和参数列表一致。

  • 私有方法不能被重写。

  • 子类重写父类方法时,访问权限必须大于或者等于父类(缺省 < protected < public)

  • 子类不能重写父类的静态方法,如果重写会报错。

举例:


public class Main {
    public static void main(String[] args) {
    newPhone np = new newPhone();
    np.call();
    np.sendMessage();
    }
}

/**
 * 手机类,提供基本的通话和短信功能
 */
class phone{
    /**
     * 执行打电话操作
     * 无参数
     * 无返回值
     */
    public void call(){
        System.out.println("打电话---");
    }

    /**
     * 执行发送短信操作
     * 无参数
     * 无返回值
     */
    public void sendMessage(){
        System.out.println("发短信---");
    }
}

/**
 * 新手机类,继承自phone类,扩展了通话和短信功能
 * 无参数
 * 无返回值
 */
class newPhone extends phone{
   /**
    * 重写打电话方法,在原有功能基础上增加玩游戏功能
    * 无参数
    * 无返回值
    */
   @Override
   public void call(){
       super.call();
        System.out.println("玩游戏---");
   }

   /**
    * 重写发送短信方法,在原有功能基础上增加发送彩信功能
    * 无参数
    * 无返回值
    */
   @Override
   public void sendMessage(){
       super.sendMessage();
       System.out.println("发彩信---");
   }
}