class Ghu { /**
* @param args
*/
private final void kis() {
System.out.println("hello");
}
class ABC extends Ghu{
public final void kis(){
System.out.println("javac");
}
}
public class Abcd{
public void main(String[] args) {
// TODO Auto-generated method stub
ABC abc=new ABC();
abc.kis();
Ghu ab=abc;/*将子类对象向上转型为父类对象*/
ab.kis();
}}
Ghu ab=abc;/*将子类对象向上转型为父类对象*/
这里的ab还是指向子类ABC的对象啊,不好访问父类的私有方法的。lz代码都写完了,试一下不就知道结果了。
1.ABC是非静态内部类 不能如此实例化吧 必须要父类的实例才行
2.私有的方法只能在类内部访问吧 外部怎么能访问
class Ghu { /**
* @param args
*/
static final void kis() {
System.out.println("hello");
}
}
class ABC extends Ghu{
public final void k(){
System.out.println("javac");
}
}
public class Abcd{
public static void main(String[] args) {
// TODO Auto-generated method stub
ABC abc=new ABC();
abc.k();
Ghu ab=abc;
ab.kis();
}}
这样就没问题了,还是可以通过子类的对象转型为父类的对象去调用自身的static final的 方法!
子类继承父类的这个方法 是不能被修改的
* @param args
*/
public static void main(String[] args) {
A a1 = new A();
B a2 = new B();
A a3 = a2;
a1.m();
a2.m();
a3.m();
}}
class A{
static void m(){
System.out.println("A----m");
}
}
class B extends A{
static void m(){
System.out.println("B----m");
}
static void ms(){
System.out.println("C----m");
}
}输出结果是
A----m
B----m
A----m
而且a3调ms();就会出错;
结论是
1.static方法继承时可以重写;
2.子类重写父类的static方法,当将子类对象上转型为父类对象时,
父类对象无法调用子类重写的Static方法;
3。子类重写父类的static方法,当将子类对象上转型为父类对象时,
父类无法调用子类自身的static方法
4。static方法重写后,父类和子类中的static方法都是存在的;