java编程思想 记

来源:互联网 发布:苹果电脑怎么删除软件 编辑:程序博客网 时间:2024/04/28 02:03

1、java中private方法默认方式是final,因为private是不能被覆盖的,但是当子类覆盖了基类的private方法时,java编译器并不会报错。所以类中所谓的接口是不包括private的方法的

2、和c++不同的是,子类是可以重载基类中的方法的,c++不会出现编译错误但是可能和我们所期望的运行结果不同,看下面的例子

class a{public void f(int k){System.out.println("inside a.f()");}}class b extends a{public void f(double k){System.out.println("inside b.f()");}}public class test{public static void main(String []args){b tmp=new b();tmp.f(1);//output: inside a.f()tmp.f(1.0);//output: inside b.f()}}

#include<stdio.h>class a{public:void f(int k){printf("inside a.f()\n");}};class b:public a{public:void f(double k){printf("inside b.f()\n");}};int main(){b *test=new b();test->f(1);//output:inside b.f()test->f(1.0);//output:inside b.f();return 0;}

3、当基类的构造器正在调用子类的动态绑定方法的时候,其结果会让人大吃一惊,看下例

class a{public a(){System.out.println("before f()");f();System.out.println("after f()");}public void f(){System.out.println("a.f()");}}public class test extends a{private int r=1;public test(int ra){r=ra;System.out.println("test.test() r="+r);}public void f(){System.out.println("test.f() r="+r);}public static void main(String []args){new test(5);//output:before f()test.f() r=0 //why not "test.f() r=1" ??after f()test.test() r=5}}



原创粉丝点击