面向对象基础-继承03(继承层次,注意事项与子类对象初始化(内存图))

本文围绕Java继承展开,介绍了Java是单重继承,不支持多重继承,形成的继承链中有继承层次等概念。还阐述了使用继承的注意事项,如不能继承父类私有成员和构造方法等,最后给出了子类对象初始化的题目实例。

继承层次

两个类之间可以发生继承,称之为父类和子类,那么一个类可以继承多个类吗?

想象一下,现实生活中,一个儿子有几个爸爸(亲生)?

现实中,没有人会有两个亲爹。

Java当中,一个类没有两个父类。

一个类有且仅有一个父类,这种特性被称之为“单重继承”,Java不支持多重继承(重点)

为什么?

​ 1,语法设计

​ 2,多重继承会来带麻烦

Java虽然不支持多重继承,但是父类还有父类,从而形成了继承链

两个重要概念:

​ 1,继承层次:由某个祖先类派生出来的所有类的集合叫做继承层次

​ 2,继承链:从某一个子类开始,到其祖先类的路径

继承层次中需要注意的地方:

​ 1,在继承链中,下游类是上游类的子类,不管隔了几层

​ 2,在继承链中的,下游的类总是继承上游类的成员

​ 3,在继承链中,下游类总可以看成一个上游类

​ 4,如有必要,可以无限继承下去

​ 5,不在同一继承链中的类,没有任何关系

使用继承的注意事项

我们已经提到过,Java当中的继承不是随心所欲的,而是由一定的限制

那我们先来学习最简单的两个限制

- 不能继承父类的私有成员
- 不能继承父类的构造方法
- 但是使用super关键字可以调用
- 构造器是创建对象用的,继承别人的构造器没有太大的意义

除了限制,某些情况可能不适合去使用继承,不要盲目使用继承

  • 我们已经知道,继承中的两个类是“is-a”关系
    • 教师类继承人类,学生类继承人类是可以理解的,也是符合继承的思想的
    • 但是教师类中有姓名属性,学生类有姓名属性,能为了这个姓名属性,让学生类继承教师类吗?

子类对象初始化

在这里插入图片描述

题目实例:

a. 声明一个Person类,里面定义了三个属性,name、gender、age(姓名、性别、年龄)
通过构造方法进行赋值。有一个display方法,可以展示对应的姓名性别年龄信息

b. 声明一个Student类,继承自Person类,增加一个独特的属性id(学号)
通过构造方法进行赋值,同时有一个方法可以展示姓名性别年龄学号信息

c. 声明一个Teacher类,继承自Person类,增加course属性(教学课程)
通过构造方法进行赋值,有一个方法,可以显示姓名性别年龄教学课程信息

d.编写一个测试类,验证你的代码.(分别创建Student对象,和Teacher对象,
要求利用子类对象的显示初始化,即在子类构造方法中,调用父类构造方法的方式 来初始化子类对象。)

package com.company;

public class Main {

    public static void main(String[] args) {
        Person person = new Person("大王", '男', 20);
        person.display();
        Student student = new Student("dw", '男', 20, 9);
        student.display();
        Teacher teacher = new Teacher("DW", '男', 20, "编程");
        teacher.display();
    }
}

class Person {
    String name;
    char gender;
    int age;

    public Person(String name, char gender, int age) {
        this.name = name;
        this.gender = gender;
        this.age = age;
    }

    public void display() {
        System.out.println("姓名:" + name + "\t" + "性别:" + gender + "\t" + "年龄:" + age + "\t");
    }
}

class Student extends Person {
    int id;

    public Student(String name, char gender, int age, int id) {
        super(name, gender, age);
        this.id = id;
    }

    public void display() {
        System.out.println("姓名:" + name + "\t" + "性别:" + gender + "\t" + "年龄:" + age + "\t" + "学号:" + id + "\t");
    }
}


class Teacher extends Person {
    String course;

    public Teacher(String name, char gender, int age, String course) {
        super(name, gender, age);
        this.course = course;
    }


    public void display() {
        System.out.println("姓名:" + name + "\t" + "性别:" + gender + "\t" + "年龄:" + age + "\t" + "课程:" + course + "\t");
    }
}

输出:

姓名:大王	性别:男	年龄:20	
姓名:dw	性别:男	年龄:20	学号:9	
姓名:DW	性别:男	年龄:20	课程:编程	
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值