java编程思想 记

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
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值