0
点赞
收藏
分享

微信扫一扫

向上造型

向上造型:父类引用子类对象,由子类对象转化为父类对象。
一个类可以向上造型的类型有:父类的类型,其实现的接口类型;
格式:
父类类型 对象名 = 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.出版图书();

举报

相关推荐

0 条评论