Java语言的特性及上转型对象

cocos2dx lua + protobuf vs 2015 cocos2dx 3.10  lua  protobuf1. 下载 protobuf 源码     https://github.com/bnnswyp/protobuf/tree/master/protobuf-2.5.0    解压后的文件列表如下所示         其中 vsprojects 文件夹为 protobuf 的vs 工程2. 打开 protobuf.sln 编译... 阅读详情

一. Java语言的特性

封装:封装是指属性私有化,根据需要提供setter和getter方法来访问属性。即隐藏具体属性和实现细节,仅对外开放接口,控制程序中属性的访问级别。封装的目的是增强安全性和简化编程,使用者不必在意具体实现细节,而只是通过外部接口(此处的接口可以理解为某些访问私有属性的方法如JavaBean中的属性以及对应的getter和setter方法)即可访问类的成员。此时如果类中有一个带参的构造函数,那一定要写一个不带参的构造函数,以方便通过无参的构造函数实例化的对象使用成员方法。

继承:继承是指多个相同的属性和方法提取出来,新建一个父类。Java中一个类只能继承一个父类即子类和父类的关系是“is-a”关系,而一个父类可以被多个子类继承,而且子类不能继承父类中访问权限为private的成员变量和方法。子类可以重写父类中的方法,及命名与父类同名的成员变量,而且子类可以添加新的方法和属性。另外,子类不能继承父类的构造方法,但是子类可以通过super()来调用父类的构造方法。从而实现了代码的复用,但是应该尽量减少继承关系以降低代码的耦合度。

继承涉及内容:构造器,protected关键字,向上转型。

构造器:继承父类的属性和方法,除了那些private的外还有一样是子类继承不了的—构造器。对于构造器而言,它只能够被调用,而不能被继承。 调用父类的构造方法我们使用super()即可。对于子类而已,其构造器的正确初始化是非常重要的,而且当且仅当只有一个方法可以保证这点:在构造器中调用父类构造器来完成初始化,而父类构造器具有执行父类初始化所需要的所有知识和能力。

public class Person {
    protected String name;
    protected int age;
    protected String sex;
    
    Person(){
        System.out.println("Person Constrctor...");
    }
}

public class Husband extends Person{
    private Wife wife;

    Husband(){
        System.out.println("Husband Constructor...");
    }
    
    public static void main(String[] args) {
        Husband husband  = new Husband();
    }
}

Output:
Person Constrctor...
Husband Constructor...

通过这个示例可以看出,构建过程是从父类“向外”扩散的,也就是从父类开始向子类一级一级地完成构建。而且我们并没有显示的引用父类的构造器,但编译器会默认给子类调用父类的构造器。而且这个默认调用父类的构造器是有前提的:父类有默认构造器。如果父类没有默认构造器,我们就要必须显示的使用super()来调用父类构造器,否则编译器会报错:无法找到符合父类形式的构造器。

public class Person {
    protected String name;
    protected int age;
    protected String sex;
    
    Person(String name){
        System.out.println("Person Constrctor-----" + name);
    }
}

public class Husband extends Person{
    private Wife wife;

    Husband(){
        super("chenssy");
        System.out.println("Husband Constructor...");
    }
    
    public static void main(String[] args) {
        Husband husband  = new Husband();
    }
}

Output:
Person Constrctor-----chenssy
Husband Constructor...

所以综上所述:对于继承而已,子类会默认调用父类的构造器,但是如果没有默认的父类构造器,子类必须要显示的指定父类的构造器,而且必须是在子类构造器中做的第一件事(第一行代码)。

对象的上转型对象:存在老虎类Tiger和动物类Animal,当我们说老虎是动物时,老虎就是去了它独有的属性和功能,只是具有动物的特性。 由此可以引申到Java语言的上转型对象。

Animal a = new Tiger();
或者
Tiger b = new Tiger();
Animal a = b;

如代码所示:我们成对象a是对象b的上转型对象(好比说“老虎是动物”)

上转型对象的特点:1. 上转型对象不能使用子类新增的成员变量和新增的方法。

                                 2. 上转型对象可以操作子类继承或者隐藏的成员变量,也可以使用子类继承或者重写的方法。即上转型对象可以可以操纵父类原有的属性和功能,无论这些方法是否被重写。其作用等价于子类对象调用这些方法。因此,如果子类重写父类的方法后,当对象的上转型对象调用这个实例化方法时一定是调用了子类重写的实例方法,如图所示:

                                 

我们可以将图中的对象理解为Tiger的实例化对象b,对象的上转型对象可以理解为Animal的实例化对象a。

注:1. 可以将对象的上转型对象在强制转换为一个子类对象,这时候该子类对象又具备了子类所有的属性和功能,

       即: Father father = new Son();//father是Son实例化对象的上转型对象。

               Son son = (Son) father; //把上转型对象强制转换成子类的对象。

       2. 不能将父类创建的对象的引用赋值给子类声明的对象(即不能说“人是美国人”)。

protected关键字:private访问修饰符,对于封装而言,是最好的选择,但这个只是基于理想的世界,有时候我们需要这样的需求:我们需要将某些事物尽可能地对这个世界隐藏,但是仍然允许子类的成员来访问它们。这个时候就需要使用到protected。对于protected而言,它指明就类用户而言,他是private,但是对于任何继承与此类的子类而言或者其他任何位于同一个包的类而言,他却是可以访问的。

public class Person {
    private String name;
    private int age;
    private String sex;

    protected String getName() {
        return name;
    }

    protected void setName(String name) {
        this.name = name;
    }

    public String toString(){
        return "this name is " + name;
    }
    
    /** 省略其他setter、getter方法 **/
}

public class Husband extends Person{
    private Wife wife;

    public  String toString(){
        setName("chenssy");    //调用父类的setName();
        return  super.toString();    //调用父类的toString()方法
    }

    public static void main(String[] args) {
        Husband husband = new Husband();
        
        System.out.println(husband.toString());
    }
}

Output:
this name is chenssy

多态:多态可以分为设计时多态和运行时多态。简单来说,多态就是同一事务,由于条件不同,产生的结果不同。而使用多态的原则是在声明变量或者是方法的参数列表时能用父类用父类,能用接口用接口。

设计时多态:即重载,是指Java允许方法名相同而参数不同(参数个数或者参数类型不同,返回值可以相同也可以不同)。

运行时多态:即重写,是指Java运行时根据调用方法的实际功能来决定调用哪个方法。从而实现了代码的灵活度,同时在使用多态时,优先调用子类的方法,如果子类没有重写父类的方法,则调用父类的方法。

多态的必要条件:继承,重写,向上转型(父类引用指向子类的实例化对象)

多态的使用过程:a. 定义子类extends父类,或者实现某接口,并重写父类中的方法;

                             b. 声明父类类型的实例化变量将其赋予子类类型的实例对象,即 Son son = new Father();

                             c. 调用相应的方法。使用多态时,父类在在调用方法时,优先调用子类的方法。如果子类没有重写父类的方法,则再调用父类的方法。

public class Wine {
    public void fun1(){
        System.out.println("Wine 的Fun.....");
        fun2();
    }
    
    public void fun2(){
        System.out.println("Wine 的Fun2...");
    }
}

public class JNC extends Wine{
    /**
     * @desc 子类重载父类方法,父类中不存在该方法,向上转型后,父类是不能引用该方法的
     * @param a
     * @return void
     */
    public void fun1(String a){
        System.out.println("JNC 的 Fun1...");
        fun2();
    }
    
    /**
     * 子类重写父类方法
     * 指向子类的父类引用调用fun2时,必定是调用该方法
     */
    public void fun2(){
        System.out.println("JNC 的Fun2...");
    }
}

public class Test {
    public static void main(String[] args) {
        Wine a = new JNC(); 
        a.fun1();
    }
}

Output:
Wine 的Fun.....
JNC 的Fun2...

 

Spring Boot 与 Redisson 版本适配深度解析 Spring Boot 与 Redisson 的版本适配是一个动态演进的过程。开发者需要密切关注两者官方的版本更新日志,建立完善的版本验证机制。本文提供的适配方案基于当前最新技术状态(2024年1月),建议在实际生产环境中通过灰度发布策略验证版本兼容性。只有深入理解底层技术原理,才能在分布式系统的星辰大海中稳健航行。延伸阅读Spring Boot 官方迁移指南。 阅读详情

相关推荐

开源低场MRI系统构建:从原理到三天实现

磁共振成像(MRI)作为现代医学影像的核心技术,其高场强系统存在成本和技术门槛问题。低场MRI通过开源硬件和模块化设计实现技术民主化,采用永磁体替代超导磁体可大幅降低系统复杂度。本文以H型永磁体设计为例,结合MaRCoS开源控制库和PyPulseq脉冲序列工具,展示了如何快速构建教育级MRI系统。关键技术包括遗传算法优化的匀场方案、CNC加工的梯度线圈,以及基于Red Pitaya的SDR控制架构。这种轻量化方案特别适合医学物理教学和脉冲序列开发验证,为MRI技术在资源有限地区的普及提供了新思路。

weixin_30470643的博客 450

java基础----对象的上转型对象

定义:即可以用父类的引用来引用子类对象(反之不可)例如:      人类  人 = new  男人();       //即男人一定是人,而人不一定是男人; 对象的上转型对象的特点:(1)上转型对象不能操作子类新增的成员变量和方法(2)上转型对象调用的是隐藏的成员变量和重写的方法(发生隐藏/重写时),即子类的成员(3)可以将上转型对象强制转到子类的对象,这时该对象就恢复对子类新

fleas的专栏 967

Claude Code 完整学习笔记

Claude Code 学习笔记摘要 Claude Code是Anthropic推出的智能编码工具,基于Claude Opus 4.5模型构建,提供跨平台支持(终端/VS Code/JetBrains/Web等)。核心功能包括: 代码库理解与多文件编辑 命令执行与开发工具集成 智能体协作开发流程 安装要求Node.js≥18,提供原生/Homebrew/npm等多种安装方式,支持环境变量配置API访问。基础交互模式包括会话管理、文件操作和代码审查等功能,可自动读写文件并执行精确修改。 (149字)

虚心若愚 812

java上转型的特点

上转型对象:子类创建一个对象,并且把该对象的引用放到父类声明的变量中。 特点: (1)上转型对象不能操作子类新增的成员变量和成员方法。上转型不能直接操作子类中和父类同名的成员变量,需要借助于get和set方法(要求父类和子类中都有对应成员变量的get和set方法,相当于重写父类的方法。一般我们也不会让子类创建一个和父类完全一样的成员变量。) (2)上转型对象可以访问子类继承和隐藏的成员变量,也可以调用子类继承和重写的成员方法。如果某个方法被重写了,上转型对象在调用这个方法时,一定是先调用子类重写后的该方法。

JPA_soul的博客 1369

卫星监测“America”级#两#栖#攻#击#舰#(LHA-6)出港

卫星监测“America”级#两#栖#攻#击#舰#(LHA-6)出港 前脚刚走,后脚又来,山姆大叔又来刷存在感,2020年7月28日,USS Ronald Reagan流窜在我国东海海区被卫星拍了下来: 2020年8月1日,最新卫星图像显示USS Ronald Reagan已经返回母港日本横须贺:距离其出港(2020年6月8日)已经过去了快两个月 然而事情并没有到此结束,“America”级#两#栖#攻#击#舰#(LHA-6)选择在 “八.一” 这个特殊的日子前后出港颇具挑衅的味道。 根据2020年

qq_46071146的博客 1566

8.2-12.4GHz喇叭天线设计

使用后处理模板的优化算法,对a1、h_horn、b1进行优化,各参数的优化区间即为之前计算得到的参数范围。由于矩形喇叭的辐射特型基本上是E面和H面扇形喇叭的结合,当波导中只是单模传播(只有TE波)时,矩形喇叭的口径可以通过远场公式推理出来。表示矩形喇叭的口径效率,进行最佳增益设计时,一般取值为0.5。从表中可以看出,该结构在8.58GHz的增益误差为2.68%>2.5%,需要对结构进行优化。建模完成,之后就是在矩形波导尾部添加波导端口激励,以及对应频率的远场监视器。,在这里,将频率定为区间的中心频率。

qq_48897427的博客 6663

Java中的上转型对象通俗解释转载

假设,A类是B类的父类,当我们用子类创建一个对象,并把这个对象的引用放到父类的对象中时,比如A a;A=new B();或A a;B b=new B();a=b;称这个父类对象 a,是子类对象b的上转型对象。好比说“老虎是哺乳动物”。对象的上转型对象的实体是子类负责创建的,但上转型对象会失去原对象的一些属性和功能。上转型对象具有如下特点:1 上转型对象不能操作子类新增的成员变量(失掉了这部分属性),不能使用子类新增的方法(失掉了一些功能)。2 上转型对象可以操作子类继承或重写的成员变量,也可以使用子类继承的

qq_46987086的博客 595

【同花顺公式编辑教程】第3章 获取数据

学习同花顺公式编辑器,其提供的数据有量价数据以及财务数据。在本章中,我们讲解了编辑器执行代码的原理,并给出了可调用数据的汇总表。

LiaoYi2016218的博客 1万+

Java学习(9)(3种向上转型的方式、重写、向下转型、多态的优缺点、抽象类【基础规则、抽象类的作用】接口【基础规则、 接口的使用】)

Java学习(9)(3种向上转型的方式、重写、向下转型、多态的优缺点、抽象类【基础规则、抽象类的作用】接口【基础规则、 接口的使用】)

m0_74343467的博客 1235

基于全局和局部接受性因果特征的广义学习模型,用于在线增量机械故障诊断

本文提出了一种**因果广义学习模型(CBLM)**,用于在线增量机械故障诊断。该模型结合了**全局因果特征**(时域、频域、故障特征频率均值)和**多尺度局部因果特征**(通过扩张卷积提取),构建了一个具有**增量学习能力**的广泛学习系统(BLS)。CBLM支持**结构增量学习**(增加增强节点)和**样本增量学习**(动态更新权重),无需重新训练整个模型,显著提高了计算效率和诊断精度。在两个滚动轴承数据集上的实验表明,CBLM在诊断准确性和训练时间上均优于传统深度学习模型,适用于在线实时故障诊断。

huanghm88的专栏 388

CloudCompare二次开发(1)——获取指定高程的所有点

使用CloudCompare插件实现获取点云数据中指定高程的所有点。

点云侠的博客 4735

Java上(下)转型对象

上转型对象 上转型对象就是声明一个父类的引用指向子类的实例化对象,例如 A a = new B(); 或者 B b = new B() ; A a = b ; 其中 A 是 B 的父类, 对象 a 就是上转型对象 那么为什么需要上转型对象,其实就是满足一种需求,关于这个需求的内容,就是上转型对象的作用,以下: 属性 : 上转型对象只能访问父类中的属性,不能访问子类新增的属性,至于子类隐藏的属性,...

阿瞒的博客 2410

全志平台camera驱动开发(4)NVP6134芯片4路模拟视频BT656输入

前言 1. 调试平台: 全志V5/T7等有BT656或BT1120的并行接口,理论有DVP接口的一般都支持 2. NVP6134可使用多路视频同时输入 硬件连接 模拟camera1 模拟camera2 NVP6134 ------>NVCSI0 ...

jzwjzw19900922的博客 3534

《从C/C++到Java入门指南》- 23.关键字及其新特性

所以向下转型前要养成一个好的习惯,那就是判断父类对象是否为子类对象的实例。可以看出,子类生成的对象会同时被判定为子类和父类的实例化。在这里就是判断了对象是否是用某个类来实例化的。因为将父类转型成子类后会得到一个。向上转型后会如何呢?

一个前端人,游戏开发魂。 384

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【JAVA基础面经】JAVA的面向对象特性

JAVA中的多态表现形式有以下几种,可以划分为编译时多态和运行时多态,编译时的多态包括方法重载和泛型,运行时的多态包括方法重写(接口方式,抽象类和抽象方法都可以归纳为方法重写的一种),向上/向下转型是运行时多态的配套语法。当通过父类引用调用该方法时,实际执行的是子类重写后的版本,这个过程在运行时动态决定,因此是运行时多态。泛型属于编译时多态的一种特殊形式,即参数化多态。向上转型指将子类对象的引用赋给父类(或接口)类型的变量,通过该操作可以使用统一的父类类型操作不同的子类对象,从而写出通用的代码。

2301_81831660的博客 414

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Java三大特性:封装、继承、多态【详解】

本文将简单介绍Java的三大特性:封装、继承、多态

weixin_47510148的博客 2492

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Java向上/向下类型转换问题、关于所有事情都在类中完成的思考

为什么Java所有事情都要在类中完成? 其实这很简单,因为Java是纯面向对象语言(oop),所有对象都是由类封装起来的,这也是面向对象很重要的封装特性。至于之前学过的比如C++语言,它并不是纯面向对象,所以可以看到比如它的main方法不是在类中完成 Java向上转型、向下转型 1、向上转型 将子类对象转化为父类对象 Animal t = new Dog(); ...

浅然的专栏 2184

Java:跨越时代的编程语言,持续赋能数字化转型

Java作为一种历经岁月考验的编程语言,在企业级应用开发、移动应用开发和大数据处理等多个领域都取得了辉煌的成就。它以其跨平台性、稳定性、安全性和丰富的生态系统等优势,成为了开发者们信赖的编程语言。随着技术的不断发展和创新,Java将继续适应时代的需求,不断进化和完善,为各行业的数字化转型提供更加坚实的支持。无论是初学者还是经验丰富的开发者,Java都值得深入学习和探索,在这个充满机遇的数字化时代,借助Java的力量创造出更加卓越的软件作品。

z18072129907的博客 571

java面向对象(多态)

多态简介 多态是同一个行为具有多个不同表现形式或形态能力 多态就是同一个接口,使用不同的实例而执行不同的操作 同一个时间发生在不同的对象会产生不同的效果 多态的优点 消除类型之间的耦合关系 可替换性 可扩充性 接口性 灵活性 简化性 多态实现方式 继承 重写 父类型引用指向子...

qq_56749867的博客 117

面向对象

Java语言主要特性 易学 强制面向对象 是分布式的 健壮 安全 解释型语言 支持多线程 面向对象思想 首先面向对象是一种编程思想,在面向对象这种编程思想出来以前,主流是以c为首的面向过程的语言,它更多的是按照计算机处理事务的思想来编写代码,被称为函数,这种编程思想对我们理解来说太复杂,不符合我们的思考方式,因此面向对象的编程思想孕育而生 万事万物都是对象,具有特定属性和行为动作的对象。符合人们对事物的认知习惯,认知形态的确立 面向对象就可以理解为把任何事物抽象成一个对象来对待,之后再对这个对象进行操作 面

weixin_42547039的博客 163

面向对象三大特征

封装: 使用访问控制符可以将对象中不允许外部程序直接访问的重要属性,隐藏在对象内部。这一过程在Java中叫封装   作用: 1.隐藏类的实现细节。 2.让使用者都只能通过事先预定的方法来访问数据,从而可以在该方法里加入控制逻辑,限制对属性的不合理访问 3.可进行数据检查,从而有利于保证对象信息的完整性。 4.便于修改,提高代码的可维护性。   封装的用法: 在People类中将

柠檬的博客 252

Java面向对象(四)

开发工具与关键技术:eclipse与java语言 作者:陈鑫鹏 撰写时间:2021年5月26日 instanceof关键字: 在Java中可以使用instanceof关键字来判断一个对象是否为一个类或接口、抽象类、父类的实例 语法格式如下: 其中,obj是一个对象,class表示一个类或者接口,当obj是class类(或接口)的实例或者子类实例时,结果result返回true,否者返回false Java对象类型转换: 所谓对象类型转换,是指存在继承关系的对象,不是任意类型的对象,分别是向上转型和向下转

weixin_47799089的博客 175

JAVA————一门强大的面向对象编程语言

JAVA————一门强大的面向对象编程语言 Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。 Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程...

yuxy36的博客 4万+

1. thinging java -对象导论

1.什么是oop 2.oop的特征 3.向上转型和向下转型 4.什么是动态绑定 5.单根继承结构 6.对象的创建和生命周期 1.什么是oop Object Oriented Programming 面向对象编程。实现语言有 C# java C++ Python oop的特征 封装 多态 和继承 分别解释一下什么是封装 多态 和继承 封装(英语:Encapsulation)是指一种将抽象性函...

cjs_helleoworld的博客 179

关于java语言当中的多态机制----多态的基础语法

关于java语言当中的多态机制:【只是多态的基础语法】 1、Animal、Cat、Bird三个类之间的关系: Cat继承Animal Bird继承Animal Cat和Bird之间不存在继承关系 2、面向对象三大特征:封装、继承、多态。 3、关于多态中涉及到的几个概念: * 向上转型(upcasting) - 子类型转换为父类型 -...

qq_44667018的博客 159

JAVA面向对象-多态的理解

面向对象编程有三个特征,即封装、继承和多态。   封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据。   继承是为了重用父类代码,同时为实现多态性作准备。那么什么是多态呢?   方法的重写、重载与动态连接构成多态性。Java之所以引入多态的概念,原因之一是它在类的继承问题上和C++不同,后者允许多继承,这确实给其带来的非常强大的功能,但是复杂的继承关...

weixin_30832143的博客 99
上一篇: Java中equals()和==的区别
下一篇: Java中抽象类与接口的区分方法及final关键字
至学者
博客等级 码龄9年 180粉丝 773原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值