Java继承

javaCoder1.4.jar java代码生成器 java代码生成器 java代码生成器 立即下载

Java继承

类 超类 子类

已存在的类称为超类( superclass )、基类 ( base class ) 或父类 ( parent class ) ; 新类称为子类 ( subclass )、派生类( derived class ) 或孩子类 ( child class )

Java通过extends关键字来实现继承

基本语法:

访问修饰符 class SubClass extends SuperClass
{

}

下面展示水果和苹果之间的继承关系

public class Fruit {

    public double weight;

    public void info()
    {
        System.out.println("我是一个水果!重"
                + weight + "g!");
    }
}


public class Apple extends Fruit{

    public static void main(String[] args)
    {
        // 创建Apple对象
        Apple a = new Apple();
        // Apple对象本身没有weight成员变量
        // 因为Apple的父类有weight成员变量,也可以访问Apple对象的weight成员变量
        a.weight = 56;
        // 调用Apple对象的info()方法
        a.info();
    }
}

重写父类的方法

比如:

public class Bird {

    // Bird类的fly()方法
    public void fly()
    {
        System.out.println("天空飞翔...");
    }


}


public class Ostrich extends Bird{


    // 重写Bird类的fly()方法
    public void fly()
    {
        System.out.println("地上奔跑...");
    }
    public void callOverridedMethod()
    {
        // 在子类方法中通过super来显式调用父类被覆盖的方法。
        super.fly();
    }

    public static void main(String[] args)
    {
        // 创建Ostrich对象
        Ostrich os = new Ostrich();
        // 执行Ostrich对象的fly()方法,将输出"我只能在地上奔跑..."
        os.fly();
    }

}

子类包含与父类同名方法的现象就是方法重写,也叫作方法覆盖

方法重写应该遵守的原则:

  • 方法名相同,形参列表相同

  • 子类方法返回值类型应该比父类返回值类型更小或者一样,子类方法声明抛出的异常类应该比父类方法声明抛出的异常类更小或者一样

  • 子类方法的访问权限应该比父类方法的访问权限更大或者一样

  • 覆盖方法和被覆盖方法要么都是类方法,要么都是实例方法,不能一个是类方法一个是实例方法

当子类覆盖了父类方法之后,子类对象无法访问父类中被覆盖的方法,但可以在子类方法中调用父类中被覆盖的方法。

如果父类的某个方法使用private修饰,那么该方法子类无法重写。

也就是说如果在子类中定义了一个与父类priva方法具有相同方法名,相同形参列表,相同的返回值类型的方法,这就不是重写了。只是在子类中定义了一个新的方法

如:


public class A {

    private void f(String s){

        System.out.println(s);
    }
}

public class Sub_A extends A{

//    此处就不是方法重写了
    public static void f(String s){

        System.out.println(s);
    }
}

Super关键字

要在子类方法调用父类被覆盖的实例方法,就可以用super关键字

super用于限定对象调用从父类继承得到的实例变量或者方法,所以super不能出现在static修饰的方法中

如果你在子类定义了和父类同名字的实例变量,那么子类的实例变量会隐藏父类中的实例变量

也就是说你在子类中使用该实例变量默认使用的是子类中定义的,而不是父类中定义的实例变量

所以可以用super解决这个问题

class BaseClass
{
    public int a = 5;
}
public class SubClass extends BaseClass
{
    public int a = 7;
    public void accessOwner()
    {
        System.out.println(a);
    }
    public void accessBase()
    {
        // 通过super来限定访问从父类继承得到的a实例变量
        System.out.println(super.a);
    }
    public static void main(String[] args)
    {
        SubClass sc = new SubClass();
        sc.accessOwner(); // 输出7
        sc.accessBase(); // 输出5
    }
}


如果在某个方法中访问名为a的成员变量,但没有显式指定调用者,则查找顺序为:

  • 查找该方法中是否有名为a的局部变量

  • 查找当前类中是否包含名为a的成员变量

  • 查找a的直接父类中是否包含名为a的成员变量,不断往上回溯,直到Object类,如果最终没有找到,编译器报错

创建一个子类对象是,系统除了为该类中定义的实例变量分配内存,也会为从父类继承得到的所有实例变量分配内存,即使同名

特殊情况:

class Parent
{
    public String tag = "parent";         //①
}
class Derived extends Parent
{
    // 定义一个私有的tag实例变量来隐藏父类的tag实例变量
    private String tag = "Derived";         //②
}
public class HideTest
{
    public static void main(String[] args)
    {
        Derived d = new Derived();
        // 程序不可访问d的私有变量tag,所以下面语句将引起编译错误
        // System.out.println(d.tag);         //③
        // 将d变量显式地向上转型为Parent后,即可访问tag实例变量
        System.out.println(((Parent)d).tag);         //④
    }
}

调用父类构造函数

一个构造函数中调用另一个重载的构造函数使用this,在子类构造函数中调用父类构造函数使用super

class Base
{
    public double size;
    public String name;
    public Base(double size , String name)
    {
        this.size = size;
        this.name = name;
    }
}
public class Sub extends Base
{
    public String color;
    public Sub(double size , String name , String color)
    {
        // 通过super调用来调用父类构造器的初始化过程
        super(size , name);
        this.color = color;
    }
    public static void main(String[] args)
    {
        Sub s = new Sub(5.6 , "World" , "红色");
        // 输出Sub对象的三个实例变量
        System.out.println(s.size + "--" + s.name
                + "--" + s.color);
    }
}

super调用的是父类的构造函数,this调用的是同一个类中的重载的构造函数

使用super调用父类构造函数也必须出现在子类构造函数中的第一行

如果子类的构造器没有显式地调用超类的构造器 , 则将自动地调用超类默认 ( 没有参数 )的构造器。如果超类没有不带参数的构造器 , 并且在子类的构造器中又没有显式地调用超类的其他构造器 ’ 则 Java 编译器将报告错误


class Creature
{
    public Creature()
    {
        System.out.println("Creature无参数的构造器");
    }
}
class Animal extends Creature
{
    public Animal(String name)
    {
        System.out.println("Animal带一个参数的构造器,"
                + "该动物的name为" + name);
    }
    public Animal(String name , int age)
    {
        // 使用this调用同一个重载的构造器
//        this(name);
        System.out.println("Animal带两个参数的构造器,"
                + "其age为" + age);
    }
}
public class Wolf extends Animal
{
    public Wolf()
    {
        // 显式调用父类有两个参数的构造器
        super("灰太狼", 3);
        System.out.println("Wolf无参数的构造器");
    }
    public static void main(String[] args)
    {
        new Wolf();
    }
}

可以看出,创建任何对象总是从该类所在继承树最顶层类的构造函数开始,依次向下执行,最后才执行本类的构造函数

2025年北京市职工职业技能大赛第六届信息通信行业网络安全技能大赛复赛CTF部分WP-哥斯拉流量分析 题目没有任何提示,附件gzl.pcap解题哥斯拉流量300多KB包很多,没啥经验只能挨个看回来之后又狠狠得撸了一把哥斯拉流量分析我这里用的是哥斯拉4.0.1测试链接这里发了两个包,我们进行分析。 阅读详情

相关推荐

Innovus 安装全过程

【代码】Innovus 安装全过程。

lmyynlbcy的博客 5537

python继承定义_Python之继承

一 继承概述①在OOP(面向对象)程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass)或派生类,而被继承的class称为基类,父类或超类(Base class,Super class);②通过继承可以使一个类获取到其他类中的属性和方法③如果在子类中如果有和父类同名的方法,则子类的方法会覆盖父类的方法,这个特点叫做重写.如下所示:cl...

weixin_30986285的博客 236

APM32F103 配置CAN

摘要: 本文介绍了基于APM32F103RCT6的CAN通信实现,包含GPIO初始化、CAN配置、数据收发功能。通过配置CAN1的GPIO引脚(PB8/PB9)和波特率(500Kbps),实现标准帧格式的数据传输。发送函数支持8字节数据包,接收函数通过FIFO0处理消息,并根据接收ID触发响应发送(如ID 0x1回复0x2)。代码还包含错误状态检测(如总线关闭处理)和过滤器配置(32位掩码模式)。整体实现了基础的CAN通信与错误管理功能。

weixin_43676660的博客 862

Java RSA算法加密

<br /><br />这种算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman.这种加密算法的特点主要是密钥的变化,上文我们看到DES只有一个密钥。相当于只有一把钥匙,如果这把钥匙丢了,数据也就不安全了。RSA同时有两把钥匙,公钥与私钥。同时支持数字签名。数字签名的意义在于,对传输过来的数据进行校验。确保数据在传输工程中不被修改。<br />    流

hezelike的专栏 758

ISO 26262中的失效率计算:Mission profile的使用

Mission profile:任务剖面,即产品在完成规定任务这段时间内所经历的时间和环境的时序描述;集成电路在工作时环境温度是在不停变化的,同时也存在运行状态和非运行状态;为此标准提出了根据任务剖面(Mission profile)以及集成电路的实际结温来评估热幅度变化、循环温度幅值等因素的影响;汽车电子元器件相关的Mission profile参考IEC TR 62380:Table 11。

weixin_47071127的博客 4811

数字电路实验避坑指南:如何正确搭建主从JK触发器测试电路(附Proteus仿真)

本文详细解析了主从JK触发器的工作原理及实验搭建指南,重点解决了常见的Catching Problem现象,并提供了Proteus仿真优化方案。通过元器件选型、电路连接步骤和常见错误排查,帮助读者正确搭建测试电路,确保数字电路实验的稳定性和可靠性。

weixin_30790841的博客 470

java 继承

继承 什么是继承 继承是指一个对象直接使用另一对象的属性和方法。 继承的基本语法 class 子类名 extends 父类名{}; e.g.: class Animal{}class Dog extends Animal{} 继承的规则 Java只支持单继承,不支持多继承 Java支持多重继承 构造方法不能被继承 能够继承父类的public和protected成员变量(方法),不能够继承父类

coder-turbo的博客 503

用ADS2023手把手仿真SKYWORKS SMA1234变容二极管:从Datasheet到S参数结果全流程

本文详细介绍了如何使用ADS2023仿真SKYWORKS SMA1234变容二极管的全流程,从Datasheet参数解析到S参数结果验证。通过等效电路建模、关键公式编写和仿真设置,帮助工程师掌握变容二极管在射频电路设计中的应用技巧,提升仿真精度和工程实践能力。

weixin_29233333的博客 502

Java 中的组合与继承

学习 JVM 的时候遇到了组合的概念,回想了下这是面向对象的知识,有点遗忘,所以写下这篇文章加深记忆。 首先,继承和组合都是实现类复用的重要手段,但继承的坏处是会破坏封装性,而采用组合的方式能提供更好的封装性。 继承(is-a) VS 组合(has-a) 下面以组合和继承的综合例子来介绍它们的区别: 要实现的目标:鸟(Bird)和狼(Wolf)都是动物(A...

Coder_xh的博客 272

2025秋招LLM大模型多模态面试题(八)- langchain完整面试题

1. **什么是 LangChain** 2. **LangChain 包含哪些核心模块** - 模型输入/输出(Model I/O) - 组件管理 - 数据处理 - 链式组合 - 记忆与上下文管理 - 外部集成 3. **一些核心概念** 4. **什么是 LangChain Agent?** 5. **什么是 LangChain model?** 6. **LangChain 包含哪些特点?** 7. **LangChain 如何使用?** - LangChai

weixin_41496173的博客 2192

点云结构面智能识别与裂隙网络分析系统

点云结构面智能识别系统摘要 本系统采用深度学习与传统几何算法融合的方法,实现岩石结构面的智能识别与分析。系统包含7个核心模块:点云预处理、结构面识别、分组分割、参数计算、粗糙度分析、裂隙网络生成和可视化。技术路线结合PointNet++深度学习架构与RANSAC、区域生长等传统算法,通过预处理→深度学习识别→几何精修→参数计算→网络构建的流程实现高精度分析。预处理模块实现点云降噪、下采样和法向量估计,深度学习模块基于改进的PointNet++架构进行特征提取和分类。系统支持多种点云格式输入,提供完整的结构面

huanghm88的专栏 345

【Scala】scala的继承能干嘛?这段简单的代码或许能帮你梳理

package cn.itcast.scala.demo2 class Person { //private关键字和final关键字修饰的常量无法被继承重写 val id: Int = 1 var name: String = "zhangsan" def sayHello = println("hello") } // 子类可以使用extends继承父类,这么做可以提高代码...

关于我转生变成程序猿这档事 270

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

java 继承是什么_java中继承指的是什么

java中继承指的是什么发布时间:2020-08-20 14:46:11来源:亿速云阅读:55作者:小新这篇文章将为大家详细讲解有关java中继承指的是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。java中继承是什么?Java中的继承是一个对象获取父对象的所有属性和行为的机制。它是面向对象编程系统(OOP)的重要组成部分。Java中继承的思想是,创建基于现...

weixin_32841641的博客 5756

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Java 继承详解

多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。多个类可以称为子类,单独这个类称为父类、超类或者基类。子类可以直接访问父类中的非私有的属性和行为。通过 extends 关键字让类与类之间产生继承关系。......

buhuisuanfa的博客 1992

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Java 继承

Java 继承

m0_74012211的博客 1320

C++的继承和Java继承的比较

在C++中继承可分为公有继承(public)保护继承(protected)和私有继承(private),而在Java中默认只有一种继承(相当于C++中的公有继承)下面我们来看一段代码#include using namespace std; class A{ int aprivate; void Aprivate(){ cout << "A类的private方法" << endl;

水寒 4366

【java】继承

继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。子类会具有父类的一般特性也会具有自身的特性。

m0_75163045的博客 1170

java的继承

在 Java 中,继承是面向对象编程的一个重要特性,它允许创建一个新的类(称为子类或派生类)基于现有的类(称为父类或超类),子类会继承父类的属性和方法,同时还可以添加自己特有的属性和方法或者重写父类的方法。

2403_88493083的博客 1734

java继承有哪些_Java中的继承类型有哪些

Java中可以实现的继承类型有:单一继承,多重继承,多级继承、分层继承和混合继承。在java的继承中也是有不同类型的,本篇文章给大家介绍Java中的继承类型,让大家了解在java中可以实现几种继承,分别是如何实现的,希望对你们有所帮助。java类中继承在类的基础上,java中可以有三种类型的继承:单一继承、多级继承、分层继承单一继承:就是一个子类和父类关系,其中一个类扩展另一个类,我们称之为单个继...

weixin_42622428的博客 2220

java可以多重继承吗_Java中的多重继承与组合vs继承

java可以多重继承吗 有时我写了几篇有关Java继承,接口和组成的文章。 在这篇文章中,我们将研究多重继承,然后了解组成优于继承的好处。 Java中的多重继承 多重继承是创建具有多个超类的单个类的能力。 与其他一些流行的面向对象的编程语言(例如C ++)不同, java不提供对类中多重继承的支持。 Java不支持类中的多重继承,因为它可能导致钻石问题,而不是提供一些复杂的方法来解决它,而是有更...

cunfeng7797的博客 4014

Java的继承

Java继承是面向对象编程的核心特性,子类通过extends关键字继承父类,可复用父类的非私有成员并扩展新功能。

2401_84284464的博客 732

java什么是继承_什么是java继承

什么是java继承继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。(推荐教程:java教程 )比如可以先定义一个类叫车...

weixin_39558754的博客 282

用java的继承怎么输出直_java中继承是什么?如何实现继承

详细内容本篇文章给大家带来的内容是介绍java中继承是什么?如何实现继承。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。java中继承是什么?Java中的继承是一个对象获取父对象的所有属性和行为的机制。它是面向对象编程系统(OOP)的重要组成部分。Java中继承的思想是,创建基于现有类的新类。从现有类中继承,可以重用父类的方法和字段。此外,还可以在当前类中添加新方法和字段。【相关...

weixin_36387104的博客 437

java继承的作用_Java继承概述以及Java继承案例和继承的好处

Java继承概述1.多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些相同属性和行为,只要继承那个类即可。2.在Java中通过extends关键字可以实现类与类的继承。例如:class 子类名 extends 父类名 {}3.单独的这个类称为父类,基类或者超类;这多个类可以称为子类或者派生类。4.有了继承以后,我们定义一个类的时候,可以在一个已经存在的类的基础上,...

weixin_29186249的博客 1996

java继承需要什么_JAVA继承

先看以下代码classStudent {String name;intage;voidstudy() {System.out.println("good study");}}classWorker {String name;intage;voidwork() {System.out.println("good work");}}以上代码中,有两个类,各自己含有两个成员变量和一个成员方法。其中,“S...

weixin_39943547的博客 247
上一篇: Java构造函数
下一篇: Java多态
Coder_py
博客等级 码龄10年 106粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值