首页 > 其他分享 >向上造型

向上造型

时间:2024-01-02 14:05:01浏览次数:20  
标签:向上 name pstu 造型 Person Student println 父类

向上造型:父类引用子类对象,由子类对象转化为父类对象。
一个类可以向上造型的类型有:父类的类型,其实现的接口类型;
格式:
父类类型 对象名 = new 子类类名
接口类型 对象名 = new 类名(接口实现后才可以实现向上造型)

简单例子讲解:

/**
 * Person类,父类,用于描述人的共有的属性
 * */
 * 
class Person {
    String name;        //人的属性,代表人的名字
    public  Person() {
        name = "Person";  //初始化一个值
        System.out.println("I'm Person!");
    }
    //定义sayHi()方法,默认输出HelloWorld
    protected void SayHi() {    
        System.out.println("HelloWorld!");
    }
}

Person类代表了人的部分属性(name)和共有行为SayHi()。

下边是子类:

/**
 * Student类, 继承了Person类
 * */

class Student extends Person {
    String className;    //班级名
    public Student() {
        name="student";    //将父类里的name重新赋值
        className = "计算机1401班";    //为className赋值
        System.out.println("I'm Student");
    }
    //这里重写了父类的SayHi方法
    protected void SayHi() {        
        System.out.println("stuName=" + name);
        System.out.println("stuClassName=" + className);
    }
	//定义学生专有方法stuTalk()
    public void stuTalk() {
        System.out.println("I like Java");
    }
}

子类里SayHi()方法的访问权限、返回值类型、方法名和父类一样,其是重写了父类中的SayHi()方法。稍后我们来详细说明,先看测试类。

测试类代码如下

public static void main(String[] args) {
        Person pstu = new Student();
        System.out.println("name="+pstu.name);      
        pstu.sayHi();
    }

输出结果:

I’m Person! 
I’m Student 
name=student 
stuName=student
stuClassName=计算机1401班

执行过程:

在new Student()的时候由于继承关系,先后分别执行了他们的无参构造,输出了I’m Person!和I’m Student。执行Person构造时name被赋值为”person” 。执行Student构造时name被重新赋值为”student”,所以打印了name=student。由于子类重写了父类的方法,于是打印了stuClassName=计算机1401班。这就是向上造型。

总结说:能点出来的看的是对象类型;实现的方法是重写后的方法,看的是对象;

例如:

public static void main(String[] args) {
        Person pstu = new Student();
        System.out.println("name="+pstu.name);      
        pstu.sayHi();
        //编译出错,父类不能直接调用子类属性和方法
        //pstu.className;
        //pstu.stuTalk();
    }

重写时对访问权限和返回值的说明:
在Java中向上造型的父类被认为是“大”的,所以在向上造型的时候重写父类方法,方法的访问权限一定要大于等于父类,返回值要和父类相同。

一个类型的引用在指向不同的对象是会有不同的表现,就像人既可以是学生还可以是孩子;

Person person1 = new student();
Person person1 = new child();
person1.写作业();
person2.孝敬父母();

同样一个对象造型成不同的类型时,会有不同的工能。

Teacher teacher = new Teacher();
企业顾问 consultant = teacher;
图书作者 author = teacher;
consultant.培训员工();
author.出版图书();

标签:向上,name,pstu,造型,Person,Student,println,父类
From: https://blog.51cto.com/u_16488678/9068860

相关文章

  • 耐心极限大挑战,整蛊小游戏之「禁止向上走」【玩转Web小游戏】
    故事是这样开始的很久很久以前,我关注的一个游戏博主,发了一个游戏视频。然后我就见识到了什么叫,「游戏叫你一步噶,你绝对走不到第二步」。这个带那么点整蛊的性质的脑洞游戏,瞬间引起了我浓厚的兴趣。需要玩家克服大脑常规套路的惯性,那岂不是游戏处处是惊喜。不过,游戏的本质还是在于趣......
  • 一文读懂制造型企业数字化诊断过程
    一文读懂制造型企业数字化诊断过程最近,前有财政部、工业和信息化部奖补亿元,积极推动中小企业数字化转型。后有南昌市工业和信息化局发布通知“为了解决广大中小企业数字化转型不会转的问题,将投入一定的资源,组织数字专员,数字化专家,以及行业领域的专家,对包括试点在内的制造类企业开展......
  • Cobalt Strike之反向上线操作
    前言CobaltStrike使用GUI框架SWING(一种javaGUI的库)开发,攻击者可通过CS木马在beacon元数据中注入恶意HTML标签,使得CobaltStrike对其进行解析并且加载恶意代码(类似XSS攻击),从而在目标系统上执行任意代码。实现原理攻击者需要通过CS木马在beacon元数据中注入恶意paylo......
  • 用JS实现简单的新闻向上轮播效果
    最近在项目中遇到一个需求,就是实现一个功能,具体内容就是写一个类似轮播的功能,有限条标题,循环轮播。首先准备一个div,里边设置好要展示的内容divclass="panelline1"style="overflow:hidden"><h2>新闻动态</h2><divclass="app"><ahref="https://w......
  • 关于向上转型以及向下转型、instanceof的一些应用。
    一、前言在Java编程中,我们常常遇到各种类型转换的情况,尤其是在处理继承关系的类时。本文将深入探讨Java中的向上转型(upcasting)、向下转型(downcasting)以及instanceof操作符的应用。首先,我们来看一下向上转型。向上转型是从一个更具体的类型向一个更一般的类型转换。例如,假设我......
  • 向上转型之后可以调用的成员方法和成员属性是父类的还是子类的?
    前言:对于多态的一些概念存在模糊,于是这次来挑一下特别容易误解的点。正文:在Java中,向上转型(upcasting)是将子类的对象引用赋给父类的引用。例如,如果User2继承自Object,那么你可以这样做:User2user2=newUser2();Objectobj=user2;//这就是向上转型在这个例子中,obj是O......
  • ES6的箭头函数,箭头函数不会创造块作用域,无法生成一个独立的环境,this指向上层的this
    varcolor='green';vartest4399={color:'blue',getColor:function(){varcolor="red";alert(this.color);}}vargetColor=test4399.getColor;getColor();test4399.getColor();以上JavaScrip......
  • 向上/下造型
    孔子云:杀鸡用牛刀者,所谓向上造型也。向上造型显然孔子没说过开头那段话。假设我们有一个父类A类,一个子类B类。classA{public:A():i(10){}voidPrint(){cout<<"a.i="<<i<<endl;}private:inti;};classB:publicA{public:B......
  • C++的向上转型
    在C/C++中经常会发生数据类型的转换,例如将int类型的数据赋值给float类型的变量时,编译器会先把int类型的数据转换为float类型再赋值;反过来,float类型的数据在经过类型转换后也可以赋值给int类型的变量。数据类型转换的前提是,编译器知道如何对数据进行取舍。例如:inta=......
  • 区块-自动自下向上移动(字幕滚动)
    示例图引入组件importautoScrollfrom'./components/autoMove.vue' 页面使用组件<divclass="pro-body"><autoScroll:list="list":speed="0.5":waitTime="2000"......