基本的java继承/数组。如何使用数组的子类变量

时间:2017-09-02 06:01:31

标签: java arrays inheritance

在这个主要方法中:

package practice;

public class PersonTest {

    public static void main(String[] args)
    {
        Person[] people = new Person[2];

        people[0] = new Person();
        people[1] = new Employee();

        System.out.println(people[1].job);
    }
}

我尝试使用作业时出现编译错误。任何人都可以告诉我为什么,以及它应该怎么做?以下是我为上述方法创建的类:

Person类:

package practice;

public class Person{
    String name;
    int age;
    public Person () {
        this.name = "undefined";
        this.age = 0;
    }
}

员工类:

package practice;

public class Employee extends Person{
    String job;
    Employee () {
        super();
        this.job = "job";
    }
}

4 个答案:

答案 0 :(得分:5)

简单:因为关于该数组的编译时间知识是:它是 Person 对象的数组。

Person[] people = new Person[2];

编译器并不关心您是否决定将 Employee 对象放入其中一个数组插槽中。

将Person和Employee对象放在这样的数组中是完全可以的 - 但是当你需要Employee特定的东西时,你会做类似的事情:

if (people[i] instanceof Employee) {
 System.out.println( ( (Employee) people[i] ). job)

假设您有的巴士。你的想法是坐在那辆公共汽车上的任何人都是雇员。不 - 这是人的公共汽车 - 你不知道坐在那里的人 - 直到你向他们询问他们的性质。

答案 1 :(得分:3)

您可以显式转换对象并更改

 <?php
     $dbhost = 'localhost'; //change credentails
     $dbuser = 'root';//change credentails
     $dbpass = '';//change credentails
     $dbname = 'TUTORIALS';//change credentails
     $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);

     if(! $conn ) {
        die('Could not connect: ' . mysqli_error());
     }
     $sql = 'SELECT id_item,id_transaction from transaction_item';
     $result = mysqli_query($conn, $sql) or die(mysqli_error($conn));
     $final_array = array();
     if (mysqli_num_rows($result) > 0) {
        while($row = mysqli_fetch_assoc($result)) {
           $final_array[$row['id_transaction']][] = $row['id_item'];
        }
        echo "<pre/>";print_r(array_values($final_array));
     } else {
        echo "0 results";
     }
     mysqli_close($conn);

?>

为:

select * from app_mtrx ABC
left join cust on cust.cust_id = ABC.cust_id and abc.cust_ty_ord = 0
left join cust BBC on cust.cust_id = BBC.cust_id and abc.cust_ty_ord = 1 
left join add_dtls DEF ON DEF.cust_id=BBC.cust_id
left join shr_adr SHR on shr.shr_adr_id = def.shr_Adr_id

答案 2 :(得分:1)

  

job是Employee Class的成员变量而不是Person。那么你   需要明确地转换为Employee才能访问它。

((Employee) people[1]).job

答案 3 :(得分:0)

谢谢大家。这回答了我的问题。我认为你不必投射到那样的方法就是扔我。