为什么要用 <接口 引用 = new 实现类>
而不是 <实现类 引用 = new 实现类> 呢?
我的理解是 为了实现多态,本来是需要你去判断对方数据的类型,调用对方的方法
因为用了接口
就变成了,对方需要实现你的接口(方法),传递接口对象
从而不必去关心传递过来的实现类内部结构是怎么样的,但是你一定知道你要实现的接口是怎么样的
而不是 <实现类 引用 = new 实现类> 呢?
我的理解是 为了实现多态,本来是需要你去判断对方数据的类型,调用对方的方法
因为用了接口
就变成了,对方需要实现你的接口(方法),传递接口对象
从而不必去关心传递过来的实现类内部结构是怎么样的,但是你一定知道你要实现的接口是怎么样的
2017-04-03
接口不能实例化,为什么呢,假设能够new一个接口,首先要清楚接口中允许有什么:静态的属性以及方法声明。这里再说明下,java的内存空间分为四类:栈(stack)、堆(heap)、代码(code)、静态数据(data)。由此可见接口中所有的东西的具体值都是存放在代码去和静态数据区的,所以接口的这块地址上并没有任何实际的值需要存储,那么为什么要给他一块地址来浪费空间呢。其实用底层代码在内存中开辟出一块空间很容易,那么为什么java设定不允许接口实例化呢,那就是接口的实例化没有任何实际意义,只会占用一块内存空间,却不会在这块空间中放任何实际的值,所以java主动去规避掉了这个问题
2017-04-03
String s = "abcdefghijklmnopq1234567890";Random random = new Random();
for(int j=0;j<9;j++){
String ss="";char c;
for (int i = 0; i <random.nextInt(s.length()); i++) {
do {c=s.charAt(random.nextInt(s.length()));
ss=ss+c;} while (stringList.contains(ss));
}stringList.add(ss);
}
for(int j=0;j<9;j++){
String ss="";char c;
for (int i = 0; i <random.nextInt(s.length()); i++) {
do {c=s.charAt(random.nextInt(s.length()));
ss=ss+c;} while (stringList.contains(ss));
}stringList.add(ss);
}
2017-04-03
被 顶的最高的没说错,老师说的也没错,但是容易让初学者误解,
我觉得老师要验证List能不能放奇怪的元素。如果List能放,就不应该让整个程序运行报错。
就像我们教小孩子,那些东西能吃那些东西不能吃,我们说大米饭能吃,给小孩举例试吃米饭时,最好不要有砂子。吃了磕牙,再说磕了牙是因为在哪有粒砂子,那样会产生,米饭不能吃,或不好吃的错觉。
我觉得老师要验证List能不能放奇怪的元素。如果List能放,就不应该让整个程序运行报错。
就像我们教小孩子,那些东西能吃那些东西不能吃,我们说大米饭能吃,给小孩举例试吃米饭时,最好不要有砂子。吃了磕牙,再说磕了牙是因为在哪有粒砂子,那样会产生,米饭不能吃,或不好吃的错觉。
2017-04-02
@布兜4227148
Course cr1=new Course(“1”,“数据结构”),这是带参数的构造函数,最开始有创建一个Course类
Course cr1=new Course(“1”,“数据结构”),这是带参数的构造函数,最开始有创建一个Course类
2017-04-01