对JAVA的继承,方法的覆盖,重载的认识 以及对象访问方面的探讨
来源:互联网 发布:淘宝手机详情批量修改 编辑:程序博客网 时间:2024/05/29 11:38
最近又开始学JAVA拉,现在将自己的学习体会写下来,希望能对大家有点帮助,当然有分析不妥当的地方请大家指正哦!
继承:子类能获得父类所有的成员(除了父类中为private的成员,因为private的成员是类内访问权限.)
override(覆盖) 的要求:
1.限定词只能越来越开放
2.覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果
3.覆盖方法的返回值必须和被覆盖方法的返回值一致
4.子类不能覆盖父类的private方法,及时定义一个和父类一样的 如父类中是 private go() 子类中也定义了个private go() 那只是在子类中新定义了一个方法,并不是覆盖了父类中的go()方法
5.父类中的静态方法也能被覆盖,但是用eclipse这样覆盖后 并没发现eclipse有提示该方法 是覆盖的方法.
6.凡是子类中和和父类中方法名(非private方法)一样的,且参数一样的方法,必须实现覆盖,否则会编译不通过.既要有一样的返回值,且访问权限不能比父类的小.
凡是子类中和和父类中方法名(非private方法)一样的,且参数不一样的方法,可以看做了进行了重载
overload (重载) 的要求:
1.方法重载要求参数必须不一致
2.对返回类型无限制
另外:
超类的引用变量可以被任何从该类的派生子类的引用赋值 即 我们假设Father 为父类 Son为继承Father的子类,那么我们可以进行这样的赋值 Father f=new Son(); 但是此时f就只能访问Father中定义了的成员部分(当然这些成员必须是在访问许可的权限内 ,譬如private成员就不能访问(当Father f=new Son(); 语句是在子类中的时候)).如果f访问的方法已经被子类覆盖了的话,那么f访问的将是子类Son中相应的方法,(而由于上面我们提到了static的方法是可以覆盖的,但是覆盖后eclipse并没有提示说是覆盖的方法,偶想肯定是有原因的 至于什么原因,偶还不知道 知道的告诉下偶拉. )偶在测试的时候发现 f访问的静态方法还是父类Father中定义的方法,子类中做了覆盖的方法并没有被调用.大家可以测试下:
static int a=1;
int b=2;
private int c=3;
protected int d=4;
int e=5;
static void doIt()...{
System.out.println("子类方法");
}
void go()...{
System.out.println("子类go方法");
}
String gg()...{
System.out.println("子类gg方法");
return "";
}
/** *//**
* @param args
*/
public static void main(String[] args) ...{
Father f=new Son();
Son s=new Son();
f.doIt();
s.doIt();
}
}
class Father...{
static int a=11;
int b=22;
private int c=33;
protected int d=44;
int h=55;
private int g=66;
static void doIt()...{
System.out.println("父亲方法");
}
void go()...{
System.out.println("父亲go方法");
}
private void gg()...{
System.out.println("父亲gg方法");
}
}
其执行的结果大家可以发现打印出来的是:
父亲方法
子类方法
如果用f去访问变量 譬如在代码中加上 System.out.println(f.a); 你会发现打印出来的是 11而不是子类中的1,打印其他的变量 System.out.println(f.b); ( System.out.println(f.c) 会提示出错,因为其为private;) System.out.println(f.d);
System.out.println(f.h); 你会发现 全部都打印出来的是 父类中变量相应的值. 而当你打印System.out.println(f.e); 会发现提示错误.因为上面我们说了 f 只能访问父类Father定义了的成员.
引用一个网友blog中写到的结论:超类的引用变量可以被任何从该超类派生的子类的引用赋值,反之,编译错误提示:incompatible types。但是,只能访问超类定义了的成员部分。如果出现方法覆盖:引用变量的类型决定了调用谁的成员变量;被引用对象的类型决定了调用谁的成员方法。也就是说,同名方法调用子类的,同名变量调用超类的。这叫超类引用变量引用子类对象。
但是我们要注意的是 对静态static 方法进行覆盖后的调用情况.
综合以上,我们要特别注意static 型的 覆盖方法 ,父类中声明为private的成员,以及在把子类的实例赋给父类的变量的时候 (Father f=new Son();) 注意该父类变量访问方法和变量的不同,访问的范围(父类中定义了的成员),相信大家把关键点掌握了,对继承,覆盖,重载就会有个很好的了解了 :)
欢迎大家讨论,指出以上分析有误的地方.
- 对JAVA的继承,方法的覆盖,重载的认识 以及对象访问方面的探讨
- java面向对象的继承以及方法重写和重载
- 对象继承时重载方法的覆盖问题
- java类的继承中方法的覆盖与重载
- 类的继承,方法重载,方法覆盖
- Java继承中方法的覆盖和重载
- Java继承中方法的覆盖和重载
- Java继承中方法的覆盖和重载
- Java继承和多态===Java继承中方法的覆盖和重载
- 《java编程思想》之控制对成员的访问权限的原因、final、继承和组合、私有方法的“覆盖”
- JAVA学习(10) 继承(2) 继承中的方法的覆盖和重载
- java方法的重载、覆盖和隐藏
- java方法的重载与覆盖
- java方法的重载与覆盖
- java 方法的重载和覆盖
- 类、对象、继承、封装、多态、方法的重载和重写、Java的访问修饰符与其它关键字
- java入门教程-4.3Java继承中方法的覆盖和重载
- java继承的认识
- palm tx
- 实验平台的建立
- 我的Ti显卡与NoSuitableGraphicsDeviceException
- java文件处理之压缩,分割
- [软件人生]程序员与语言选择——给一个刚毕业的大学生工作方向的分析对话
- 对JAVA的继承,方法的覆盖,重载的认识 以及对象访问方面的探讨
- Java学习从入门到精通[原创]
- 数据库行转列的sql语句
- 初入IT场职感悟
- 转载:SAP技术概述完结篇 - SAP开发平台
- [zt]PEAR简介:用pear来写你的下一个php程序
- weekend 04Nov2006...
- 学习Java语言中的覆盖和重载
- 腾讯公司--未来网络中的中央银行