前言
我们在这里想一个场景:
人物:
小明:精通LOL
小明父亲:精通Java
事件:
某天,小明父亲出去上课,小明在家LOL
突然有个无赖进入小明家中,如果小明爸爸不给他讲解,就赖着不走
此刻小明在想
爸爸现在没在家,但是不回答的话此人,此人必定不走
所以小明,化妆成爸爸的模样,解答此人问题
送走此人后继续LOL
代码
小明爸爸的代码
/**
* 小明父亲
* @author yibox
* @date 2019 09 12 11:30
*/
public class Father {
public int age = 40;
public void teach(){
System.out.println("讲解Java");
}
}
小明代码
/**
*小明代码
* @author yibo
* @date 2019 09 12 11:32
*/
public class Xiaom extends Father {
public int age = 18;
@Override
public void teach(){
System.out.println("讲解LOL攻略");
}
public void playGame(){
System.out.println("在家打LOL");
}
}
无赖上门请教
/**
* 多态转换,成员访问,详细讲解
* @author yibo
* @date 2019 09 12 11:35
*/
public class GotoTeach {
public static void main(String[] args) {
//xiao开始扮演父亲
//向上转型,调用左边类的方法,结果为右边同名的方法
Father xiaomF = new Xiaom();
//个人介绍了一下自己的年龄
System.out.println(xiaomF.age);
xiaomF.teach();//虽然是扮演,但是用到方法时,还是调用自己的
//xiaomF.playGame();//专业扮演,父亲会啥我就会啥,但是父亲不会的,我也不能会(自身特有的方法不能使用)
System.out.println("=======================================");
//无赖走了, 小明褪去伪装,继续做小明
//向下转型,从向上转型退回到本类型
Xiaom xiaomT =(Xiaom)xiaomF;
System.out.println(xiaomT.age);
xiaomT.playGame();
xiaomT.teach();
}
}
输出结果
注意
名称 | 特点 |
---|---|
成员变量 | 编译看左边,运行看左边。 |
构造方法 | 创建子类对象时,访问父类的构造方法,对父类中数据初始化 |
成员方法 | 编译看左边, 运行看右边 |
静态方法 | 编译看左边,运行看左边。 |
左右表示等号左右
//向上转型,调用左边类的方法,结果为右边同名的方法
Father xiaomF = new Xiaom();
//向下转型,从向上转型退回到本类型
Xiaom xiaomT =(Xiaom)xiaomF;
继承的时候:
子类中有和父类中一样的方法,叫重写。
子类中没有父亲中出现过的方法,方法就被继承过来了。