Java中父類怎么調(diào)用子類的方法
父類能調(diào)用子類的方法嗎?
答:能。
怎么做?
- 把子類傳遞到父類的有參構(gòu)造中,然后調(diào)用。
- 使用反射的方式調(diào)用,你使用了反射還有誰不能調(diào)用的?!
- 父類調(diào)用子類的靜態(tài)方法。
案例展示:
package com.ywq;
public class Test2{
public static void main(String[] args)
{
Son son = new Son();
Father father=new Father(son);
father.fun1();
father.fun4();
}
}
class Father{
public Son son;
public Father(Son son){
this.son=son;
}
public Father() {
}
public void fun4(){
//方法3:使用反射的方式調(diào)用子類方法
try {
Class cls=Class.forName("com.ywq.Son");
Son son=(Son) cls.newInstance();
son.fun2();
} catch (Exception e) {
e.printStackTrace();
}
}
public void fun1(){
//方法1:把子類傳遞到父類的有參構(gòu)造函數(shù)中,然后調(diào)用。
System.out.println("我是父類的方法");
son.fun2();
//方法2:父類調(diào)用子類的靜態(tài)方法。
Son.fun3();
}
}
class Son extends Father{
public static void fun3(){
System.out.println("我是子類的靜態(tài)方法");
}
public void fun2(){
System.out.println("我是子類的方法");
}
}
這三種都是父類直接調(diào)用子類的方法,
好用不?好用!
解決問題了嗎?解決了!
項(xiàng)目中允許使用不?不允許!
我就一直沒有搞懂為什么要用父類調(diào)用子類的方法。如果一定要調(diào)用子類,那為什么要繼承它呢?搞不懂。其實(shí)這個(gè)問題可以換個(gè)角度去理解,父類建立框架,子類在重寫了父類部分的方法后,再調(diào)用從父類繼承的方法,產(chǎn)生不同的結(jié)果(而這正是模板方法模式)。這是不是也可以理解為父類調(diào)用了子類的方法呢?你修改了子類,影響了父類行為的結(jié)果,曲線救國的方式實(shí)現(xiàn)了父類依賴子類的場(chǎng)景,模板方法模式就是這種效果。
以上所述是小編給大家介紹的Java父類調(diào)用子類的方法詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Java+Selenium調(diào)用JavaScript的方法詳解
這篇文章主要為大家講解了java在利用Selenium操作瀏覽器網(wǎng)站時(shí)候,有時(shí)會(huì)需要用的JavaScript的地方,代碼該如何實(shí)現(xiàn)呢?快跟隨小編一起學(xué)習(xí)一下吧2023-01-01
SpringBoot通過@MatrixVariable進(jìn)行傳參詳解
這篇文章主要介紹了SpringBoot使用@MatrixVariable傳參,文章圍繞@MatrixVariable展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-06-06
基于@RequestBody和@ResponseBody及Stringify()的作用說明
這篇文章主要介紹了基于@RequestBody和@ResponseBody及Stringify()的作用說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
Java修飾符abstract與static及final的精華總結(jié)
abstract、static、final三個(gè)修飾符是經(jīng)常會(huì)使用的,對(duì)他們的概念必須非常清楚,弄混了會(huì)產(chǎn)生些完全可以避免的錯(cuò)誤,比如final和abstract不能一同出現(xiàn),static和abstract不能一同出現(xiàn),下面我們來詳細(xì)了解2022-04-04
Java序列化JSON丟失精度問題的解決方法(修復(fù)Long類型太長)
這篇文章主要給大家介紹了關(guān)于Java序列化JSON丟失精度問題的解決方法,修復(fù)Long類型太長的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-03-03
MyBatis中insert操作返回主鍵的實(shí)現(xiàn)方法
在使用MyBatis做持久層時(shí),insert語句默認(rèn)是不返回記錄的主鍵值,而是返回插入的記錄條數(shù)。這篇文章主要介紹了MyBatis中insert操作返回主鍵的方法,需要的朋友可以參考下2016-09-09
Spring手動(dòng)生成web.xml配置文件過程詳解
這篇文章主要介紹了Spring手動(dòng)生成web.xml配置文件過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
淺談springMVC接收前端json數(shù)據(jù)的總結(jié)
下面小編就為大家分享一篇淺談springMVC接收前端json數(shù)據(jù)的總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-03-03
springboot 設(shè)置局域網(wǎng)訪問的實(shí)現(xiàn)步驟
Spring Boot是一個(gè)開源Java-based框架,用于創(chuàng)建獨(dú)立的、生產(chǎn)級(jí)別的Spring應(yīng)用,它旨在簡化Spring應(yīng)用的初始搭建及開發(fā)過程,通過提供各種自動(dòng)配置的starter包,Spring Boot使得項(xiàng)目配置變得簡單快速,感興趣的朋友一起看看吧2024-02-02

