在这个主要方法中:
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";
}
}
答案 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)
谢谢大家。这回答了我的问题。我认为你不必投射到那样的方法就是扔我。