java中的繼承-子類繼承父類的許可權問題
阿新 • • 發佈:2018-12-26
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{ }