继承

1.继承概述

继承是面向对象的三大特征之一。可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法

1.1 继承的格式

  • 格式:public class 子类名 extends 父类名{}
  • 范例:public class Zi extends Fu{}
  • Fu:父类,也叫基类、超类
  • Zi:子类,也叫派生类

1.2 继承中子类的特点

  • 子类可以有父类的内容
  • 子类还可以有自己特有的内容

2.继承的好处和弊端

好处:

  • 提高了代码的复用性(多个类相同的成员可以放到同一个类中)
  • 提高了代码的维护性(如果方法的代码需要修改,修改一处即可)

弊端:

继承让类和类之间产生了关系,类的耦合性增强了,当父类中发生变化时子类实现也不得不跟着发生变化,削弱了子类的独立性。


什么时候使用继承?

假设法:

有两个类A和B,如果他们满足A是B得一种或者B是A的一种,就说明他们存在继承关系,这个时候就可以考虑用继承来实现,否则就不能乱用继承

举例:

水果和苹果,猫和动物,猫和狗

3.继承中变量的访问特点

在子类方法中访问一个变量:

  • 先在子类方法中的范围找
  • 在子类成员范围找
  • 在父类成员范围找
  • 如果都没有就报错,不考虑父类的父类

4.super关键字

super关键字和this关键字的用法相似

  • this:代表本类对象的引用
  • super:代表父类对象的引用(父类存储空间的标识)
关键字 访问成员变量 访问构造方法 访问成员方法
this this.成员变量:访问本类中的成员变量 this(...):访问本类的构造方法 this.成员方法(...):访问本类的成员方法
super super.成员变量:访问父类的成员变量 super(...):访问父类的构造方法 super.成员方法:访问父类的成员方法

示例:

父类

package com.itheima_04;

public class Father {
    public int age = 40;
}

子类

package com.itheima_04;

public class Son extends Father {
    public int age = 30;

    public void show(){
        int age = 10;
        //访问方法中的age
        System.out.println(age);
        //访问子类中的age
        System.out.println(this.age);
        //访问父类中的age
        System.out.println(super.age);
    }
}

测试类

package com.itheima_04;

public class Test {
    public static void main(String[] args) {
        Son s = new Son();
        s.show();
    }
}

5.继承中构造方法的访问特点

子类中所有的构造方法都默认会访问父类中无参的构造方法

  • 因为子类要继承父类中的数据,可能还会使用父类中的数据。所以子类初始化之前,一定要先完成对父类的初始化。
  • 每一个子类构造方法的第一条语句默认都是:super()

6.方法重写

方法重写概述

  • 子类中出现了和父类中一模一样的方法声明

方法重写的应用

  • 当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,既沿袭了父类的功能又定义了子类特有的内容

@Override

  • 是一个注解
  • 可以帮助我们检查重写方法的方法声明的正确性

示例:

Phone

package itheima_05;
//手机类
public class Phone {
    public void call(String name){
        System.out.println("给" + name + "打电话!");
    }
}

NewPhone

package itheima_05;
//新式手机
public class NewPhone extends Phone{
    @Override                   //注解,可以帮助检查方法声明的正确性
    public void call(String name){
        System.out.println("开启视频功能");
        super.call(name);
    }
}

PhoneDemo

package itheima_05;
//测试类

public class PhoneDemo {
    public static void main(String[] args) {
        //创建对象
        Phone phone = new Phone();
        phone.call("蓝头发妹妹");

        System.out.println("============");
        NewPhone newPhone = new NewPhone();
        newPhone.call("蓝头发妹妹");
    }
}

7.重写的注意事项

  • 私有方法不能被重写(父类私有成员子类是不能继承的)
  • 子类方法访问权限不能比父类方法中的访问权限低

8.继承的注意事项

  • Java中的类只支持单继承,不支持多继承
  • Java中类是支持多层继承的
posted on 2020-12-09 14:33  凌落宸  阅读(164)  评论(0编辑  收藏  举报