继承知识点—详细

news2025/3/17 9:59:22

一:普通写法

package extend_;

public class Extends01 {
    public static void main(String[] args) {
        Pubil pubil = new Pubil();
        pubil.name="小明";
        pubil.age=18;
        pubil.testing();
        pubil.setScore(60);
        pubil.showInfo();

        System.out.println("-------------------------");
        Graduate graduate = new Graduate();
        graduate.name="王二狗";
        pubil.age=20;
        pubil.testing();
        pubil.setScore(80);
        pubil.showInfo();

    }
}
package extend_;

//小学生
public class Pubil {
    public String name;
    public int age;
    private double score;

    public void setScore(double score) {
        this.score = score;
    }

    public void testing() {
        System.out.println("小学生"+name+"正在考小学数学");
    }

    public void showInfo(){
        System.out.println("小学生名"+name+"年龄"+age+"成绩"+score);
    }
}
package extend_;

public class Graduate  {
    public String name;
    public int age;
    private double score;

    public void setScore(double score) {
        this.score = score;
    }

    public void testing() {
        System.out.println("大学生"+name+"正在考大学数学");
    }

    public void showInfo(){
        System.out.println("小学生名"+name+"年龄"+age+"成绩"+score);
    }
}

二:用继承方法写

结构为:

Extend01类:

package extend_.improve_;

import extend_.Graduate;
import extend_.Pubil;

public class Extend01 {
    public static void main(String[] args) {
        extend_.Pubil pubil = new Pubil();
        pubil.name="小明";
        pubil.age=18;
        pubil.testing();
        pubil.setScore(60);
        pubil.showInfo();

        System.out.println("-------------------------");
        extend_.Graduate graduate = new Graduate();
        graduate.name="王二狗";
        pubil.age=20;
        pubil.testing();
        pubil.setScore(80);
        pubil.showInfo();

    }
}

Graduate类:

package extend_.improve_;

public class Graduate extends Student {
    public void testing() {
        System.out.println("大学生   "+name+"    正在考大学数学");
    }
}

Pubil类:

package extend_.improve_;

//让Public 继承 Student类
public class Pubil extends Student{
    public void testing() {
        System.out.println("小学生    "+ name +"    正在考小学数学");
    }
}

Student类:

package extend_.improve_;

//父类,是Public 和 Graduate 的父类
public class Student {
    public String name;
    public int age;
    private double score;

    //共有的方法
    public void setScore(double score) {
        this.score = score;
    }

    public void showInfo(){
        System.out.println("学生名为  "+name+"    年龄"+age+"    成绩 "+score);
    }


}

三:继承的细节

1.

注:我们发现  n4  和  test400() 爆错了,因为:私有属性和方法不能在子类中直接访问!!!,我们该怎么做才能访问呢?

答:要通过父类提供公共的方法去访问。

2.

package extend_;

public class Base {
    public int n1=100;
    protected int n2=200;
    int n3=300;
    private int n4=400;

    public Base() {  //无参构造器
        System.out.println("父类Base()被调用");
    }

    //父类提供一个public的方法,返回n4
    public int getN4(){
        return n4;
    }

    public void CallTest400(){
        test400();
    }

    public void test100(){
        System.out.println("Base test100");
    }

    protected void test200(){
        System.out.println("Base test200");
    }

    void test300(){
        System.out.println("Base test300");
    }

    private void test400(){
        System.out.println("Base test400");
    }
}

注:先调用父类的构造器,在调用子类的构造器。为什么会调用呢,因为子类的无参构造器里面有super()命名(默认调用子类的无参构造器),可写可不写。

2.1

注:由上面一个图可知,无论怎么样,都先调用父类的无参构造器!!!

2.2:如果父类没有提供无参构造器,该怎么办?

该代码的无参构造器没有了,有一个有参构造器,(无参构造器被覆盖了)

package extend_;

public class Base {
    public int n1=100;
    protected int n2=200;
    int n3=300;
    private int n4=400;

   // public Base() {  //无参构造器
        //System.out.println("父类Base()被调用");
   // }

    public Base(String name,int age ){       //有参构造器
        System.out.println("父类Base(String name,int age )被调用");
    }

    //父类提供一个public的方法,返回n4
    public int getN4(){
        return n4;
    }

    public void CallTest400(){
        test400();
    }

    public void test100(){
        System.out.println("Base test100");
    }

    protected void test200(){
        System.out.println("Base test200");
    }

    void test300(){
        System.out.println("Base test300");
    }

    private void test400(){
        System.out.println("Base test400");
    }
}

上面有二个地方爆错

2.2:解决办法(加super指定调用父类中的哪个构造器)

运行效果:

四:继承的内存布局

package extend_;

public class ExtendsTheory {
    public static void main(String[] args) {
        Son son=new Son();
        System.out.println(son.name);
        System.out.println(son.age);
        System.out.println(son.hobby);
    }
}

class GrandPa{  //爷类
    String name="大头爷爷";
    String hobby="旅游";
}

class Father extends GrandPa{  //父类
    String name="大头爸爸";
    int age=30;
}

class Son extends Father{  //子类
    String name="大头儿子";
}

注意事项:

运行结果:

五:super和this关键字

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2316551.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

设备管理VTY(Telnet、SSH)

实验目的:物理机远程VTY通过telnet协议登录AR1,ssh协议登录AR2和sw 注意配置Cloud1: 注意!!博主的物理机VMnet8--IP:192.168.160.1,所以AR1路由0/0/0端口才添加IP:192.168.160.3,每个…

Linux 中 Git 使用指南:从零开始掌握版本控制

目录 1. 什么是 Git? Git 的核心功能: 2. Git 的安装 Ubuntu/Debian 系统: 验证安装: 3.gitee库 4. Git 的首次配置 配置用户名和邮箱: 查看配置: 5. Git 的基本使用 初始化仓库 添加文件到暂存区…

CSS -属性值的计算过程

目录 一、抛出两个问题1.如果我们学过优先级关系,那么请思考如下样式为何会生效2.如果我们学习过继承,那么可以知道color是可以被子元素继承使用的,那么请思考下述情景为何不生效 二、属性值计算过程1.确定声明值2.层叠冲突3.使用继承4.使用默…

百度贴吧IP和ID是什么意思?怎么查看

在百度贴吧这一充满活力的网络社区中,IP和ID是两个频繁出现的概念。它们各自承载着不同的意义和作用,对于贴吧用户而言,了解这两个概念有助于更好地参与社区互动、保护个人隐私以及维护社区秩序。本文将详细解析百度贴吧中IP和ID的含义&#…

SpiderX:专为前端JS加密绕过设计的自动化工具

SpiderX 一、工具概述 SpiderX是一款专为解决前端JS加密问题而设计的自动化绕过工具。在网络安全领域,随着前端加密技术的普及,传统的爬虫和自动化测试工具在面对复杂的JS加密时显得力不从心。SpiderX应运而生,旨在通过自动化手段高效绕过前…

基于银河麒麟系统ARM架构安装达梦数据库并配置主从模式

达梦数据库简要概述 达梦数据库(DM Database)是一款由武汉达梦公司开发的关系型数据库管理系统,支持多种高可用性和数据同步方案。在主从模式(也称为 Master-Slave 或 Primary-Secondary 模式)中,主要通过…

【AWS入门】AWS云计算简介

【AWS入门】AWS云计算简介 A Brief Introduction to AWS Cloud Computing By JacksonML 什么是云计算?云计算能干什么?我们如何利用云计算?云计算如何实现? 带着一系列问题,我将做一个普通布道者,引领广…

适合企业内训的AI工具实操培训教程(37页PPT)(文末有下载方式)

详细资料请看本解读文章的最后内容。 资料解读:适合企业内训的 AI 工具实操培训教程 在当今数字化时代,人工智能(AI)技术迅速发展,深度融入到各个领域,AIGC(人工智能生成内容)更是成…

【数据结构与算法】Java描述:第四节:二叉树

一、树的相关概念 编程中的树是模仿大自然中的树设计的,呈现倒立的结构,我们着重掌握 二叉树 。 1.1 基本概念: 结点的度:一个结点有几个子结点,度就是几; 如上图:A的度为3 树的度&#xff1…

Day5 结构体、文字显示与GDT/IDT初始化

文章目录 1. harib02b用例(使用结构体)2. harib02c用例3. harib02d用例(显示字符图案)3. harib02e用例(增加字符图案)4. harib02g用例4.1 显示字符串4.2 显示变量值 5. harib02h用例(显示鼠标&a…

系统思考全球化落地

感谢加密货币公司Bybit的再次邀请,为全球团队分享系统思考课程!虽然大家来自不同国家,线上学习的形式依然让大家充满热情与互动,思维的碰撞不断激发新的灵感。 尽管时间存在挑战,但我看到大家的讨论异常积极&#xff…

【开原宝藏】30天学会CSS - DAY1 第一课

下面提供一个由浅入深、按步骤拆解的示例教程,让你能从零开始,逐步理解并实现带有旋转及悬停动画的社交图标效果。为了更简单明了,以下示例仅创建四个图标(Facebook、Twitter、Google、LinkedIn),并在每一步…

钉钉项目报销与金蝶系统高效集成技术解析

钉钉报销【项目报销类】集成到金蝶付款单【画纤骨】的技术实现 在企业日常运营中,数据的高效流转和准确对接是提升业务效率的关键。本文将分享一个具体的系统对接集成案例:如何将钉钉平台上的项目报销数据无缝集成到金蝶云星空的付款单系统中。本次方案…

Datawhale coze-ai-assistant:Task 1 了解 AI 工作流 + Coze的介绍

学习网址:Datawhale-学用 AI,从此开始 工作流(Workflow)是指完成一项任务或目标时,按照特定顺序进行的一系列活动或步骤。它强调在计算机应用环境下的自动化,通过将复杂的任务拆分成多个简单的步骤,每一步都…

深度学习 Deep Learning 第3章 概率论与信息论

第三章 概率与信息论 概述 本章介绍了概率论和信息论的基本概念及其在人工智能和机器学习中的应用。概率论为处理不确定性提供了数学框架,使我们能够量化不确定性和推导新的不确定陈述。信息论则进一步帮助我们量化概率分布中的不确定性。在人工智能中,…

GStreamer —— 2.15、Windows下Qt加载GStreamer库后运行 - “播放教程 1:Playbin 使用“(附:完整源码)

运行效果 介绍 我们已经使用了这个元素,它能够构建一个完整的播放管道,而无需做太多工作。 本教程介绍如何进一步自定义,以防其默认值不适合我们的特定需求。将学习: • 如何确定文件包含多少个流,以及如何切换 其中。…

MYsql—1

1.mysql的安装 在windows下安装mysql,直接官网搜索即可:http://www.mysql.com/,自己找想要的版本进行download,官网长这样 安装路径需要是英文路径,设置默认即可,若安装执行内容时报错,则AltCt…

位运算(基础算法)

按位与AND( & ) 只有当两个位都为1时,结果才为1,否则为0。结果不会变大 按位或 OR( | ) 只有当两个位中有一个为1时,结果才为1,否则为0。结果不会变小 按位异或 XOR ( ^ ) 只…

硬件地址反序?用位操作为LED灯序“纠偏”。反转二进制数即可解决

特别有意思,LED的灯序与其硬件地址刚好相反,没办法直接通过加1实现二进制进位的亮灯操作,查了一些资料说用数组和switch实现,觉得太麻烦了,思索良久,就想到了反转二进制数解决这个问题。 reverse_bits( )是…

图解AUTOSAR_CP_BSWMulticoreLibrary

AUTOSAR BSW 多核库详解 AUTOSAR基础软件多核操作库详细解析 目录 架构概述 1.1. 组件架构 1.2. API结构 1.3. 错误处理流程详细设计 2.1. 基础数据类型 2.2. 接口说明 2.3. 错误处理机制使用指南 3.1. 配置说明 3.2. 典型应用场景 3.3. 注意事项 1. 架构概述 1.1. 组件架构 …