面向对象特征之继承

继承
概述

如果多个类中存在相同的属性和行为时,将这些内容抽取到单独的一个类中,那么多个类就无需再定义这些属性和行为,只要去继承这个单独的类即可。

其中,多个类称为子类,派生类,单独的那一个类称为父类、超类(superclass)、基类

继承描述的是事物之间二队所属关系,这种关系是:is - a 的关系,在继承关系中,子类就是一个父类。也即是说,子类可以被当作父类看待。

例如:父类是员工,子类是讲师,那么"讲师就是一个员工"。

一般情况下,父类更通用,子类更具体。我们可以通过继承,使多种事物之间形成一种关系体系。

定义

​ 继承:就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为、子类可以直接访问父类中的【非私有】的属性和行为。

好处:

  1. 可以提高代码的复用性。

  2. 类与类之间可以产生一种关系,是【多态】的前提。

继承的格式

通过extends关键字,可以声明一个子类继承一个父类:

public class FuClass{
    //....
}
public class ZiClass extends FuClass{
    //....
}

代码演示:

/*
  定义一个员工类Employee,父类
*/
public class Employee{
    String name;// name属性
    int id;// 工号属性
    // 定义一个员工的工作方法
    public void work(){
        System.out.println("努力的工作!");
    }
}
/*
   定义讲师类Teacher 继承 员工类Employee
*/
public class Teacher extends Employee{
    
    // 定义讲师类中的专有的方法
    public void teach(){
        System.out.println(name + "在教课");
    }  
}
/*
 定义一个测试
*/
public class TestExtendsDemo01{
    public static void main(String[] args){
        // 创建一个讲师类
        Teacher t = new Teacher();
        
        // 为该员工类的name属性赋值
        t.name = "小张";
        
        // 调用该员工中的教课的方法
        t.teach();
        
        // 调用Teacher类继承过来的work()方法
        t.work();
    }
}
继承后的特点----成员变量

当类之间产生了关系后,其中各类的成员变量有哪些影响?

成员变量不重名

如果子类父类中定义的成员变量名字不重名,这时的访问没有任何影响。

public class Fu{
    // 定义一个变量
    int num = 10;
}

public class Zi extends Fu{
    // 定义一个变量
    int num2 = 20;
    
    // 定义一个子类的成员方法
    public void show(){
        // 访问父类中的成员变量 num
        System.out.println("父类中的成员变量num = " + num); // 10 继承而来的,可以直接访问
        // 访问子类中的成员变量 num2
        System.out.println("子类中的成员变量num2 = " + num2); // 20
    }
}
public class TextExtendsField{
    
    public static void main(String[] args){
        // 创建子类的对象
        Zi zi = new Zi;
        // 调用子类的方法
        zi.show();
      
    }
}
成员变量重名

​ 如果子类父类出现重名的成员变量,这时的访问是有影响的。

public class Fu{
    // 定义父类中的成员变量
    int num = 10;
}
public class Zi extends Fu{
    // 定义子类中的成员变量
    int num = 20;
    // 定义子类中的成员方法
    public void show(){
         System.out.println("父类中的成员变量num = " + num);//20
         System.out.println("子类中的成员变量num = " + num);//20
    }
}

在父子类的继承关系当中,如果成员变量重名,则创建子类对象时,访问有两种方式:

直接通过子类对象访问成员变量:等号左边是谁,就优先用谁,没有会向上找

间接通过成员方法访问成员变量:该方法属于谁,就优先用谁,没有则继续向上找。

子父类中出现了重名的成员变量时,在子类中想要访问父类中的非私有的成员变量时,需要使用"super"

关键字,修饰父类的成员变量,类似于this操作。

使用格式:

super.父类的成员变量名

子类方法中的代码需要修改

public class Zi extends Fu{
 // 定义子类中的成员变量
    int num = 20;
    // 定义子类中的成员方法
    public void show(){
        System.out.println("父类中的成员变量num = " + super.num);//10
        System.out.println("子类中的成员变量num = " + num);//20
}
}

备注:Fu类中的成员变量是非私有的,子类中可以直接访问。若Fu类中的成员变量私有了,子类不能直接访问。通常编码时,我们遵循的是封装的原则,使用private关键字修饰成员变量,那么如何访问父类中的私有成员变量呢?可以借助于父类中的提供的公共的setXxx和getXxx方法

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值