继承(一)

1.概述

1.1 引入

假如我们要定义如下类: 学生类,老师类和工人类,分析如下:

  1. 学生类 属性:姓名,年龄 行为:吃饭,睡觉
  2. 老师类 属性:姓名,年龄,薪水 行为:吃饭,睡觉,教书
  3. 班主任 属性:姓名,年龄,薪水 行为:吃饭,睡觉,管理

如果我们定义了这三个类去开发一个系统,那么这三个类中就存在大量重复的信息(属性:姓名,年龄。行为:吃饭,睡觉)。这样就导致了相同代码大量重复,代码显得很臃肿和冗余,那么如何解决呢?
假如多个类中存在相同属性和行为时,我们可以将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可。如图所示:
在这里插入图片描述
其中,多个类可以称为子类,单独被继承的那一个类称为父类、超类(superclass)或者基类。

1.2 继承的含义

继承描述的是事物之间的所属关系,这种关系是: is-a 的关系。例如,兔子属于食草动物,食草动物属于动物。可见,父类更通用,子类更具体。我们通过继承,可以使多种事物之间形成一种关系体系。
继承:就是子类继承父类的属性和行为,使得子类对象可以直接具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。

1.3 继承的好处
  1. 提高代码的复用性(减少代码冗余,相同代码重复利用)。
  2. 使类与类之间产生了关系。

2. 继承的格式

通过 extends 关键字,可以声明一个子类继承另外一个父类,定义格式如下:

class 父类 {
...
}
class 子类 extends 父类 {
...
}

需要注意:Java是单继承的,一个类只能继承一个直接父类,跟现实世界很像,但是Java中的子类是更加强大的。

3. 继承案例

3.1 案例

请使用继承定义以下类:

  1. 学生类 属性:姓名,年龄 行为:吃饭,睡觉
  2. 老师类 属性:姓名,年龄,薪水 行为:吃饭,睡觉,教书
  3. 班主任 属性:姓名,年龄,薪水 行为:吃饭,睡觉,管理
3.2 案例图解分析

老师类,学生类,还有班主任类,实际上都是属于人类的,我们可以定义一个人类,把他们相同的属性和行为都定义
在人类中,然后继承人类即可,子类特有的属性和行为就定义在子类中了。
如下图所示。

在这里插入图片描述

3.3 案例代码实现

1.父类Human类

public class Human {
// 合理隐藏
private String name ;
private int age ;
// 合理暴露
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}

2.子类Teacher类

public class Teacher extends Human {
// 工资
private double salary ;
// 特有方法
public void teach(){
System.out.println("老师在认真教技术!")}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}

3.子类Student类

public class Student extends Human{
}

4.子类BanZhuren类

public class Teacher extends Human {
// 工资
private double salary ;
// 特有方法
public void admin(){
System.out.println("班主任强调纪律问题!")}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}

5.测试类

public class Test {
public static void main(String[] args) {
Teacher dlei = new Teacher();
dlei.setName("播仔");
dlei.setAge("31");
dlei.setSalary(1000.99);
System.out.println(dlei.getName());
System.out.println(dlei.getAge());
System.out.println(dlei.getSalary());
dlei.teach();
BanZhuRen linTao = new BanZhuRen();
linTao.setName("灵涛");
linTao.setAge("28");
linTao.setSalary(1000.99);
System.out.println(linTao.getName());
System.out.println(linTao.getAge());
System.out.println(linTao.getSalary());
linTao.admin();
Student xugan = new Student();
xugan.setName("播仔");
xugan.setAge("31");
//xugan.setSalary(1000.99); // xugan没有薪水属性,报错!
System.out.println(xugan.getName());
System.out.println(xugan.getAge());
}
}
3.4 小结
  1. 继承实际上是子类相同的属性和行为可以定义在父类中,子类特有的属性和行为由自己定义,这样就实现了相同属性和行为的重复利用,从而提高了代码复用。
  2. 子类继承父类,就可以直接得到父类的成员变量和方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值