国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 關于protected修飾符詳解-源于Cloneable接口

關于protected修飾符詳解-源于Cloneable接口

2022-03-09 13:19FinelyYang Java教程

這篇文章主要介紹了protected修飾符詳解-源于Cloneable接口,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Cloneable接口是一個空接口,僅用于標記對象,Cloneable接口里面是沒有clone()方法,clone()方法是Object類里面的方法,默認實現是一個Native方法。

 

今天在做對象拷貝的時候發現一個問題

某類實現Cloneable接口后,還要重新實現Object類中的clone()方法:

關于protected修飾符詳解-源于Cloneable接口

感覺有點奇怪,這個類里也沒做什么特殊的操作啊,就是調用一下父類的clone方法:

關于protected修飾符詳解-源于Cloneable接口

這太麻煩了,我們都知道protected的權限范圍:

關于protected修飾符詳解-源于Cloneable接口

也就是說子類是可以訪問protected修飾的方法的。

 

接下來按照我們的思路寫代碼實現

1.去掉User類中的clone方法:

關于protected修飾符詳解-源于Cloneable接口

接下來直接調用Object類中的clone方法:

關于protected修飾符詳解-源于Cloneable接口

這時發現,報錯啦!!! 子類實例竟然不能調用父類的clone方法!!!我們會有疑問:Object類是所有類的父類,那么為什么子類不能訪問父類protected修飾的方法呢?

其實是因為:“與基類不在同一個包中的子類,只能訪問自身從基類繼承而來的受保護成員,而不能訪問基類實例本身的受保護成員”。這句話是什么意思?不要急,接下來我們用代碼詳細解釋。

所以這里是因為,User類和Object類不同包,導致protected方法訪問不了,接下來我們驗證一下:

關于protected修飾符詳解-源于Cloneable接口

關于protected修飾符詳解-源于Cloneable接口

沒有錯誤,可以直接調用父類protected方法getA:

關于protected修飾符詳解-源于Cloneable接口

此時Student類和Person類在同一個包下,假如不在同一個包中呢:

關于protected修飾符詳解-源于Cloneable接口

關于protected修飾符詳解-源于Cloneable接口

此時報錯了:

關于protected修飾符詳解-源于Cloneable接口

我們發現此時子類不能調用父類的protected方法了。

 

為什么應用了Cloneable接口的類

 

通常還必須重寫一個public的clone()方法

這里有兩個原因:

(1) 如果不重寫,由于Object.clone()是proteced屬性,所以這個clone()方法將無法在外部被調用,更精確地說,無法在目標類之外的任何地方調用。這樣就使得克隆失去了用武之地。

(2) Object.clone()畢竟只是提供了淺層拷貝,對于基本類型的字段,可以說它成功克隆了。但對于對象型字段,它并沒有實現克隆的功能,僅僅做了一個賦值。試運行一下下面的代碼就會更清楚了:

public class Student implements Cloneable 
{
    private int id;
    private String name;
    public StringBuffer sb = new StringBuffer(""); 
    public Student() {
        this.id = 744;
        this.name = "FL";
    }
 
    public Student(int id, String name) {
        this.id = id;
        this.name = name;
    }
 
    public boolean equals(Object obj) {
        return this.id == ((Student) obj).id;
    }
 
    public String toString() {
        return "Student id : " + id + " Name " + name;
    }    
 
    public static void main(String[] args) throws CloneNotSupportedException 
    {
        Student s1 = new Student(101, "WangQiang");
        Student s2 = (Student) s1.clone();
        System.out.println(s1 == s2);
        System.out.println(s1);
        System.out.println(s2); 
        s1.sb.append("s1"s string");
        System.out.println("s2.sb"s value = " + s2.sb.toString());
        System.out.println(s1.sb==s2.sb);        
    }
}

 

總結

對于protected的成員或方法,要分子類和基類是否在同一個包中。與基類不在同一個包中的子類,只能訪問自身從基類繼承而來的受保護成員和方法,而不能訪問基類實例本身的受保護成員和方法。在相同包時,protected和public是一樣的。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/xiaoxiangzi520/article/details/79019670

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91久久在线观看 | 亚洲91精品 | 黄色在线| 日韩在线视频观看 | 中文字幕亚洲一区二区三区 | 免费的一级毛片 | 欧美美女黄色网 | 国产伦精品一区二区三区四区视频 | 精一区二区 | 久久精品久久久久电影 | 日本中文字幕在线视频 | 51国产午夜精品免费视频 | 色婷婷亚洲一区二区三区 | 亚洲午夜激情 | 亚洲国产精品一区二区久久 | av片免费观看 | 国产精品一区二区不卡 | 三级在线不卡 | 中文字幕在线观看一区 | 午夜激情在线播放 | 日韩精品在线观看一区 | 午夜爱爱毛片xxxx视频免费看 | 国产精品久久久亚洲 | 久久久一二三 | 中文字幕一二三区 | 中文字幕在线观看视频一区 | av在线免费播 | 欧美另类久久 | 97人人爱| 91大神xh98hx在线播放 | 国产一区二区三区久久久 | 毛片国产| 欧美日韩国产一区二区三区 | 国产精品免费久久久久久久久 | 伊人无码高清 | 欧美在线不卡 | 欧美日一本 | 91精品国产综合久久久久久漫画 | av高清在线看 | 看亚洲a级一级毛片 | 91精品国产欧美一区二区 |