1. 程式人生 > >java中的繼承-子類繼承父類的許可權問題

java中的繼承-子類繼承父類的許可權問題

                                                java中的繼承

        Java語言面向物件有三大特性:封裝、繼承、多型。其中的繼承,描述了一種“is-a”的關係,可以理解為子集合和父集合。子類可以繼承父類的方法、域、構造方法。但是,java中的變數都是有許可權的,子類繼承的時候要不要考慮呢?
class A{
    public int x=10;
    public static int y=20;
    public static void printstatic(){
        System.out.println("這是父類的靜態方法");
        
        
    }
    
    public void print(){
        System.out.println("這是父類的非靜態方法");
        
        
    }
    
    
}

class B extends A{
    
    
    
    
}
public class Demo47 {

    public static void main(String[] args) {
        B b=new B();
        b.print();
        b.printstatic();
        System.out.println(b.x);
        System.out.println(b.y);
    }

}
對於上面的一段程式碼,首先考慮靜態和非靜態的區別。 輸出結果如下:
很明顯,不論是靜態的還是非靜態的,子類都可以直接引用。
public class Demo47 {

    public static void main(String[] args) {
        B b=new B();
        b.print();
        b.privateprint();
        b.printstatic();
        System.out.println(b.x);
        System.out.println(b.y);
        System.out.println(b.z);
    }

}


class A{
    public int x=10;
    private int z=10;
    public static int y=20;
    public static void printstatic(){
        System.out.println("這是父類的靜態方法");
        
        
    }
    
    public void print(){
        System.out.println("這是父類的非靜態方法");
        
        
    }
    
    private void privateprint(){
        System.out.println("這是父類的非靜態方法");
        
        
    }
    
    
}

class B extends A{
    
    
    
    
}
而對於上面的一段程式碼,則因為許可權設定為了私有,編譯器會直接報錯。

要想得到父類中的私有化變數,就有提供可以獲得變數的共有方法。
public class Demo47 {

    public static void main(String[] args) {
        B b=new B();
//        b.print();
//        b.printstatic();
        System.out.println(b.x);
        System.out.println(b.y);
        System.out.println(b.getz());
    }

}


class A{
    public int x=10;
    private int z=15;
    public static int y=20;
    public static void printstatic(){
        System.out.println("這是父類的靜態方法");
        
        
    }
    
    public void print(){
        System.out.println("這是父類的非靜態方法");
        
        
    }
    
    private void privateprint(){
        System.out.println("這是父類的非靜態方法");
        
        
    }
    
    protected int getz() {
        return z;
    }
    
    
    
}

class B extends A{
    
    
    
    
}
向上面的一段程式碼,就會得到私有變數並輸出以下結果: