电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

解決java中的父類私有成員變量的繼承問題

瀏覽:8日期:2022-08-18 14:12:39

如果父類中屬性為私有(private),那么能否被子類繼承呢?

答案是不可以。

我們看如下簡單代碼

class Father { private String name; public void sayHi() { System.out.println('My name is ' + this.name); }}class Son extends Father {}public class PrivateFieldTest { public static void main(String[] args) { Father f1 = new Father(); Son s1 = new Son(); f1.sayHi(); s1.sayHi(); }}

得到的結果是:

My name is nullMy name is null

這里我們使用的都是默認構造函數,子類自動引用父類的默認構造函數。直接構造為null。

這樣,Son類繼承了Father類的sayHi方法,那么自然,Son的sayHi方法中使用的“name”變量,自然就是Son內部繼承自Father的私有變量name了,也就是說私有變量可以被繼承?

不是的。

我們再看下一段代碼,我們在Son的類中重寫一下sayHi方法。

class Father { private String name; public void sayHi() { System.out.println('My name is ' + this.name); }}class Son extends Father { public void sayHi() { System.out.println('My name is ' + this.name); }}public class PrivateFieldTest { public static void main(String[] args) { Father f1 = new Father(); Son s1 = new Son(); f1.sayHi(); s1.sayHi(); }}

這里,出現了編譯錯誤,即Son類里面并沒有繼承name.

解決java中的父類私有成員變量的繼承問題

我們看看錯誤的原因。

The field Father.name is not visible

可以看見,編譯器自動認為,name是屬于Father的,Son內并沒有繼承。

那為什么第一段代碼中,可以使用sayHi方法得到數據呢?

實際上,這樣解釋比較好:

“子類不能繼承父類的私有屬性,但如果子類中公有的方法影響到了父類的私有屬性,那么私有屬性是能夠被子類使用的。”

這句話聽起來很拗口,但是實際情況確實也很拗口。

看如下代碼

class Father { private String name; public void setName(String name) { this.name = name; } public void sayHi() { System.out.println('My name is ' + name); }}class Son extends Father {}public class PrivateFieldTest { public static void main(String[] args) { Father f1 = new Father(); Son s1 = new Son(); f1.sayHi(); s1.sayHi(); System.out.println(); f1.setName('Sam'); f1.sayHi(); s1.sayHi(); System.out.println(); s1.setName('Tom'); f1.sayHi(); s1.sayHi(); }}

運行結果是

My name is nullMy name is nullMy name is SamMy name is nullMy name is SamMy name is Tom

第一段結果,沒有變化。

第二段結果,對應的是我們使用setName方法改變了f1的name,所以f1對應的sayHi結果變成了Sam。

第三段結果,對應的是我們使用setName方法改變了s1的name,所以s1對應的sayHi結果變成了Tom。

由此我們可以看到,雖然子類不能繼承父類私有變量,但是還是可以通過公有方法使用私有變量。只是重寫函數的時候可能比較麻煩,所以要活用super。

補充:Java子類訪問父類的私有成員變量

子類會繼承父類所有的屬性和方法。

但是根據不同的權限標識符,子類不可見父類的私有變量,但可以通過父類的公共方法訪問私有變量

所以對于重名變量,子類和父類都各有一份。

對于子類和父類中重名的方法,則為重寫。即子類重寫了父類的方法,用于多態。

同一個類中函數的簽名不同,則為方法的重載。函數的簽名為函數名+參數列表,與返回值無關。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。如有錯誤或未考慮完全的地方,望不吝賜教。

標簽: Java
相關文章:
主站蜘蛛池模板: 全自动变压器变比组别测试仪-手持式直流电阻测试仪-上海来扬电气 | 焊接减速机箱体,减速机箱体加工-淄博博山泽坤机械厂 | 离子色谱自动进样器-青岛艾力析实验科技有限公司 | 金环宇|金环宇电线|金环宇电缆|金环宇电线电缆|深圳市金环宇电线电缆有限公司|金环宇电缆集团 | 钢结构-钢结构厂房-钢结构工程[江苏海逵钢构厂] | 工业硝酸钠,硝酸钠厂家-淄博「文海工贸」 | 红立方品牌应急包/急救包加盟,小成本好项目代理_应急/消防/户外用品加盟_应急好项目加盟_新奇特项目招商 - 中红方宁(北京) 供应链有限公司 | 环境模拟实验室_液体-气体控温机_气体控温箱_无锡双润冷却科技有限公司 | ET3000双钳形接地电阻测试仪_ZSR10A直流_SXJS-IV智能_SX-9000全自动油介质损耗测试仪-上海康登 | 市政路灯_厂家-淄博信达电力科技有限公司 | 旋振筛|圆形摇摆筛|直线振动筛|滚筒筛|压榨机|河南天众机械设备有限公司 | NMRV减速机|铝合金减速机|蜗轮蜗杆减速机|NMRV减速机厂家-东莞市台机减速机有限公司 | 东亚液氮罐-液氮生物容器-乐山市东亚机电工贸有限公司 | 胶水,胶粘剂,AB胶,环氧胶,UV胶水,高温胶,快干胶,密封胶,结构胶,电子胶,厌氧胶,高温胶水,电子胶水-东莞聚力-聚厉胶粘 | 宁夏档案密集柜,智能密集柜,电动手摇密集柜-盛隆柜业宁夏档案密集柜厂家 | 【连江县榕彩涂料有限公司】官方网站 | 超声波成孔成槽质量检测仪-压浆机-桥梁预应力智能张拉设备-上海硕冠检测设备有限公司 | 细沙回收机-尾矿干排脱水筛设备-泥石分离机-建筑垃圾分拣机厂家-青州冠诚重工机械有限公司 | 自进式锚杆-自钻式中空注浆锚杆-洛阳恒诺锚固锚杆生产厂家 | 卓能JOINTLEAN端子连接器厂家-专业提供PCB接线端子|轨道式端子|重载连接器|欧式连接器等电气连接产品和服务 | 缝纫客| 电动打包机_气动打包机_钢带捆扎机_废纸打包机_手动捆扎机 | 智慧消防-消防物联网系统云平台 智能化的检漏仪_气密性测试仪_流量测试仪_流阻阻力测试仪_呼吸管快速检漏仪_连接器防水测试仪_车载镜头测试仪_奥图自动化科技 | 高低温万能试验机-复合材料万能试验机-馥勒仪器 | 卡诺亚轻高定官网_卧室系统_整家定制_定制家居_高端定制_全屋定制加盟_定制家具加盟_定制衣柜加盟 | 驾驶式洗地机/扫地机_全自动洗地机_工业洗地机_荣事达工厂官网 | 万师讲师网-优质讲师培训师供应商,讲师认证,找讲师来万师 | 北京网站建设首页,做网站选【优站网】,专注北京网站建设,北京网站推广,天津网站建设,天津网站推广,小程序,手机APP的开发。 | 电销卡_北京电销卡_包月电话卡-豪付网络 | 自动记录数据电子台秤,记忆储存重量电子桌称,设定时间记录电子秤-昆山巨天 | 机器视觉检测系统-视觉检测系统-机器视觉系统-ccd检测系统-视觉控制器-视控一体机 -海克易邦 | 耐火浇注料-喷涂料-浇注料生产厂家_郑州市元领耐火材料有限公司 耐力板-PC阳光板-PC板-PC耐力板 - 嘉兴赢创实业有限公司 | 昆明网络公司|云南网络公司|昆明网站建设公司|昆明网页设计|云南网站制作|新媒体运营公司|APP开发|小程序研发|尽在昆明奥远科技有限公司 | 交流伺服电机|直流伺服|伺服驱动器|伺服电机-深圳市华科星电气有限公司 | 电力电子产业网 | 乐泰胶水_loctite_乐泰胶_汉高乐泰授权(中国)总代理-鑫华良供应链 | 涿州网站建设_网站设计_网站制作_做网站_固安良言多米网络公司 | 河南橡胶接头厂家,河南波纹补偿器厂家,河南可曲挠橡胶软连接,河南套筒补偿器厂家-河南正大阀门 | 电缆接头-防爆电缆接头-格兰头-金属电缆接头-防爆填料函 | 四川职高信息网-初高中、大专、职业技术学校招生信息网 | 老城街小面官网_正宗重庆小面加盟技术培训_特色面馆加盟|牛肉拉面|招商加盟代理费用多少钱 |