先說(shuō)一下代碼結(jié)構(gòu),一共是老師只祠、學(xué)生兜蠕、管理員三個(gè)角色,是將他們共有的屬性抽出來(lái)寫了一個(gè)Person類铆农,但是不同的部分沒有寫在Person類,也就是父類中狡耻,然后使用繼承來(lái)使用共有的一部分東西墩剖。
先看一下代碼
Person.java
package com.itppf.繼承;
public class Person {
private String name;
private String sex;
private int age;
private double height;
private double weight;
public void setName(String name){
this.name=name;
}
public String getName(){
return this.name;
}
public void setSex(String sex){
this.sex=sex;
}
public String getSex(){
return this.sex;
}
public void setAge(int age){
this.age=age;
}
public int getAge(){
return this.age;
}
public void setHeight(double height){
this.height=height;
}
public double getHeight(){
return this.height;
}
public void setWeight(double weight){
this.weight=weight;
}
public double getWeight(){
return this.weight;
}
}
Student.java
package com.itppf.繼承;
public class Student extends Person {
public void action(){
System.out.println(this.getName()+"學(xué)生學(xué)習(xí)");
}
}
Teacher.java
package com.itppf.繼承;
public class Teacher extends Person{
public void teach(){
System.out.println(this.getName()+"老師教課");
}
}
Administrator.java
package com.itppf.繼承;
public class Administrator extends Person{
public void option(){
System.out.println(this.getName()+"進(jìn)行操作");
}
}
然后寫了測(cè)試類。
package com.itppf.繼承;
public class Test {
public static void main(String[] args) {
Person p1=new Student();
Person p2=new Teacher();
Person p3=new Administrator();
p1.setName("學(xué)生1");
p1.setAge(12);
p1.setHeight(180.0);
p1.setWeight(140.00);
System.out.println("學(xué)生姓名:"+p1.getName());
System.out.println("學(xué)生年齡:"+p1.getAge());
System.out.println("學(xué)生身高:"+p1.getHeight());
System.out.println("學(xué)生體重:"+p1.getWeight());
p1.action(); //注意夷狰,這里是報(bào)錯(cuò)的
}
}
注意岭皂,在這里報(bào)錯(cuò)了,我一直想這個(gè)問題是怎么回事沼头?以前調(diào)用子類方法的時(shí)候沒有出現(xiàn)過(guò)這種狀態(tài)爷绘,我估計(jì)是多態(tài)的情況下出現(xiàn)了問題书劝,于是我準(zhǔn)備換種方式試一下。
Student p1=new Student();
果然不報(bào)錯(cuò)了土至。
但是多態(tài)的情況下沒有辦法解決的嗎购对?
方法一
并不是,使用Alt+Enter可以解決這個(gè)問題陶因。
補(bǔ)全后成為了這個(gè)樣子
((Student) p1).action();
輸出也沒有問題骡苞,查詢后可知是向上向下轉(zhuǎn)型問題。
這里需要父類強(qiáng)轉(zhuǎn)為子類楷扬,然后調(diào)用子類方法解幽。
Person p1=new Student();
//現(xiàn)在開始
Student s1=(Student)p1;
s1.action();
這個(gè)和上面的快捷鍵補(bǔ)全意思是一樣的,但是我起碼明白了是怎么一回事烘苹,這個(gè)叫做向下轉(zhuǎn)型躲株。
同理,肯定還有向上轉(zhuǎn)型镣衡,子類強(qiáng)制轉(zhuǎn)型成父類霜定。
((Person)s1).action();
//拆開
Person p1=(Person)s1;
p1.action();
其實(shí)這個(gè)問題還有一種解決方法。
方法二