向上造型

向上造型(通俗易懂)

向上造型:父类引用子类对象,由子类对象转化为父类对象。
一个类可以向上造型的类型有:父类的类型,其实现的接口类型;
格式:
父类类型 对象名 = 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.出版图书();
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值