作者
或許大家java的多態問題
例子一共有兩個class
B
package
import
/**
* <p>Title: protect
* <p>Description: email:</p>
* <p>Copyright: Matrix Copyright (c)
* <p>Company: </p>
* @author chris
* @version
*/
public class B extends A
{
protected int protectedb =
protected int protectedab =
protected void protectedTest(Object obj)
{
System
}
}
A
package
import
/**
* <p>Title: protect
* <p>Description: email:</p>
* <p>Copyright: Matrix Copyright (c)
* <p>Company: </p>
* @author chris
* @version
*/
public class A
{
protected int protecteda =
protected int protectedab =
private void privateTest()
{
System
}
protected void protectedTest(Object obj)
{
System
}
protected void protectedTest( String str )
{
System
}
public static void main (String[] args)
{
// Test A
A a
a
// Test B
String helloStr = "Hello";
Object helloObj = helloStr;
B b
A a
b
b
b
b
a
a
}
}
下面
困惑
這裡其實就是子類自動上溯造型到父類A
在java裡面
所以
困惑
A a
如果確實需要進行這樣的轉化
困惑
b
public class A
{
private int two(int i) { return i; }
}
class Test extends A {
public static void main(String[] args) {
System
}
}
System
被保護的域或方法只能被類本身
下面是一個錯誤使用protected的例子:
package
public class ProtectedTest {
protected void show() {
System
}
}
import
public class Test {
public static void main (String[] args) {
ProtectedTest obj = new ProtectedTest();
obj
}
}
因為訪問權限問題
困惑
b
為什麼jvm能夠確定是輸出B的方法而不是A的方法? 這就和jvm的運行機制有關系了
在這裡
然後實際上不是這樣的
困惑
b
呵呵
所以
in mytest
line
在這裡
父類的源代碼:
public super
{
private void test(int i
{
System
}
}
子類的源代碼:
public sub
{
private void test(long j
{
System
}
}
子類和父類都用有相同名稱的方法test
但是如果你在另外一個類中用到了如下代碼:
Sub sb = new Sub();
sb
你就會遇到編譯錯誤
困惑
a
輸出結果分別是
From:http://tw.wingwit.com/Article/program/Java/Javascript/201311/25404.html