小生有一不懂得 程序 望高手指点

来源:百度知道 编辑:UC知道 时间:2024/05/30 17:17:32
package com.wsy;

class Parents{
private final void doit(){
System.out.println("父类.doit()");
}
final void doit2(){
System.out.println("父类.doit2()");
}
public void doit3(){
System.out.println("父类.doit3()");
}
}
class Sub extends Parents{
public final void doit(){
System.out.println("子类.doit()");
}
// final void doit2(){ //final方法不能覆盖
// System.out.println("子类.doit2()");
// }
public void doit3(){
System.out.println("子类.doit3()");
}
}
public class FinalMethod {

public static void main(String[] args) {
// TODO 自动生成方法存根
Sub s=new Sub();
s.doit();
Parents p=s;
//p.doit();//不能调用private方法
p.doit2();
p.doit3();
}
}
输出:子类.doit()
父类.doit2()
父类 .doit3()
例子举的是 作为final方法不能被覆盖 子类中覆盖父类的doit 方法

此程序的关键是把一个子类的实例赋给父类的引用。它所讲的基本类型指的是Parents类,当又一个父类的引用指向子类对象时,Sub类向上转换成Parents类并且可以当成Parents类使用。父类声明为private的变量子类能看不能用,声明为final的变量或方法能看能用不能改。其实把子类看做子类里面包含着一个父类,当父类的引用指向子类时,只能看到子类里面所包含的父类内容,而看不到子类本身特有的变量和方法就好理解了。