先說一下代碼結(jié)構(gòu),一共是老師、學(xué)生、管理員三個角色,是將他們共有的屬性抽出來寫了一個Person類,但是不同的部分沒有寫在Person類,也就是父類中,然后使用繼承來使用共有的一部分東西。
先看一下代碼
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)行操作");
}
}
然后寫了測試類。
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(); //注意,這里是報錯的
}
}

注意,在這里報錯了,我一直想這個問題是怎么回事?以前調(diào)用子類方法的時候沒有出現(xiàn)過這種狀態(tài),我估計是多態(tài)的情況下出現(xiàn)了問題,于是我準(zhǔn)備換種方式試一下。
Student p1=new Student();
果然不報錯了。

但是多態(tài)的情況下沒有辦法解決的嗎?
方法一
并不是,使用Alt+Enter可以解決這個問題。
補(bǔ)全后成為了這個樣子
((Student) p1).action();
輸出也沒有問題,查詢后可知是向上向下轉(zhuǎn)型問題。
這里需要父類強(qiáng)轉(zhuǎn)為子類,然后調(diào)用子類方法。
Person p1=new Student();
//現(xiàn)在開始
Student s1=(Student)p1;
s1.action();
這個和上面的快捷鍵補(bǔ)全意思是一樣的,但是我起碼明白了是怎么一回事,這個叫做向下轉(zhuǎn)型。
同理,肯定還有向上轉(zhuǎn)型,子類強(qiáng)制轉(zhuǎn)型成父類。
((Person)s1).action();
//拆開
Person p1=(Person)s1;
p1.action();
其實(shí)這個問題還有一種解決方法。
方法二
那就是在父類中定義方法,然后在子類中進(jìn)行重寫,代碼補(bǔ)全的時候也提供了這一種方法。
在父類中定義該方法。

子類重寫
