向上转型和向下转型

//parent class
class Employee{
    public Employee(){
        System.out.println("Employee");
    }
    public  void print()
    {
        System.out.println("Employee Details");
    }
}
// child class 
class Manager extends Employee
{
    public Manager()
    {
        System.out.println("Manager");
    }
    public void print()
    {
        System.out.println("Manager Details");
    }
}
// child class
   class Supervisor extends Employee
   {
       public Supervisor()
       {
           System.out.println("Supervisor");
       }
       public void print()
       {
           System.out.println("Supervisor Details");
       }
   }
   class Test 
   {
       public static void main(String[] args) {
           Employee emp1, emp2; //reference 
           Manager m1;
           Supervisor s1;
           emp1 = new Manager();
           emp2 = new Supervisor();
           Employee emp3 = new Manager();//Upcasting of Object
           m1 = (Manager) emp1;     // Employee reference but Manager Object -> DownCasting
           s1=(Supervisor) emp2;
           emp3.print();
           
          
       }
   }
  
运行结果:
Employee
Manager
Employee
Supervisor
Employee
Manager
Manager Details

这里面有几个问题我不明白。


1.例如class Employee中的 public Employee()和 public  void print()这两个语句有啥区别?他们的作用是不是输出Employee和Employee Details?

2.最后psvm中的Employee emp1, emp2; 

把Employee创建为两个对象是什么意思?  这一句中的emp1和emp2是不是指代的一样的意思?只是在后面把其指代为不同的对象?

3.emp1 = new Manager();  new了一个Manager()对象,并被emp1指向,但是此时的emp1是等于Manager class中的"Manager"还是"Manager Details"??

4.运行结果是怎么运行的才得到的这样一个结果呢?emp3.print(); 是啥意思?


小弟小白,希望大神悉心讲解。感谢感谢!


java小学三班
浏览 1317回答 2
2回答

ziom

我不知道你java学到了甚么程度,如果连public Employee()和 public  void print()这两个语句的区别都不清楚,后面三个问题也没必要去了解了,先学明白java基础语法再说。

夜很殇37

当你new的时候,会先执行父类的构造方法,再执行子类的构造方法
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java