当前位置: 技术问答>java相关
大家对thinking in java 2有没有什么感悟啊??今天看内隐类的时候遇到了大问题!
来源: 互联网 发布时间:2015-10-25
本文导语: 在这本书的地266页 !虽然代码能看的懂但是它说的思想好象有点难理解,今天一天看了三遍还是没有头绪,主要是 public class parce1 { public wrapping wrap(int x){ return new wrapping(x){ public int value(){ ret...
在这本书的地266页 !虽然代码能看的懂但是它说的思想好象有点难理解,今天一天看了三遍还是没有头绪,主要是
public class parce1 {
public wrapping wrap(int x){
return new wrapping(x){
public int value(){
return super.value()*47;
}
};
}
public static void main(String[] args) {
parce p = new parce();
wrapping w=p.wrap(10);
}
}
它说当BASE CLASS需要一个带有引数的构造函数时使用!不解的啊 !
这么一段,很是头痛,后面一页说的的FINAL参数更是不用说了,
最后还有一点感觉就是BRUCE ECKEL的思想好象很怪,有些个地方他把INTERFACE和CALSS等同的看,就是说接口和类有那么的类似啊!
public class parce1 {
public wrapping wrap(int x){
return new wrapping(x){
public int value(){
return super.value()*47;
}
};
}
public static void main(String[] args) {
parce p = new parce();
wrapping w=p.wrap(10);
}
}
它说当BASE CLASS需要一个带有引数的构造函数时使用!不解的啊 !
这么一段,很是头痛,后面一页说的的FINAL参数更是不用说了,
最后还有一点感觉就是BRUCE ECKEL的思想好象很怪,有些个地方他把INTERFACE和CALSS等同的看,就是说接口和类有那么的类似啊!
|
我也恰好在看这本书,以下是我的一点拙见,欢迎讨论:
首先,我们注意到这里所谓的BASE CLASS指的是Wrapping Class(P264):
class Wrapping{
private int i;
public Wrapping(int x) {i=x;}//带有引数的构造函数
public int value() {return i;}
}
这个匿名类的基类是Wrapping,上面的代码展示了在这种匿名类的情况下如何正确初始化基类。
再者,对于final,编译器说当本地变量(local variable)被内部类使用时都应当为final。我也不知其确切原因,但很奇怪其实匿名类的基类用了这一变量却用不着定义为final。
至于interface和class,我觉得可以认为interface就是abstract class,因此在某些地方会等同看待!
还请大家给出高见!
首先,我们注意到这里所谓的BASE CLASS指的是Wrapping Class(P264):
class Wrapping{
private int i;
public Wrapping(int x) {i=x;}//带有引数的构造函数
public int value() {return i;}
}
这个匿名类的基类是Wrapping,上面的代码展示了在这种匿名类的情况下如何正确初始化基类。
再者,对于final,编译器说当本地变量(local variable)被内部类使用时都应当为final。我也不知其确切原因,但很奇怪其实匿名类的基类用了这一变量却用不着定义为final。
至于interface和class,我觉得可以认为interface就是abstract class,因此在某些地方会等同看待!
还请大家给出高见!
|
我也是刚刚学!看过这本书的第2章感觉它的翻译特别扭!建议如果初学,最好不要看!
另外我从其他的书中看到,声明为abstract的类必须被子类化,不可能用new来创建这种类的实例!也就是说这个类是父类,而接口是在它的父类的基础上,来声明实现某种行为的子类!而且接口好象可以创建子类!用“好象”,是因为我是新手,水平低!从这一点看,接口与 abstrct类又是不同的!所以我的拙见接口是类,但它的存在必须要有其父类!而它只实现父类没有实现的行为!
拙见!若有错,请大家赶紧批评,多谢!
另外我从其他的书中看到,声明为abstract的类必须被子类化,不可能用new来创建这种类的实例!也就是说这个类是父类,而接口是在它的父类的基础上,来声明实现某种行为的子类!而且接口好象可以创建子类!用“好象”,是因为我是新手,水平低!从这一点看,接口与 abstrct类又是不同的!所以我的拙见接口是类,但它的存在必须要有其父类!而它只实现父类没有实现的行为!
拙见!若有错,请大家赶紧批评,多谢!
|
我上个礼拜刚看完!
"BASE CLASS需要一个带有引数的构造函数时使用!"这个问题一楼朋友说的很对.
侯先生译的很清楚啊!!!
我觉得interface 跟 class 是弟兄两个,各有个的用出. interface 和 内隐就是为拉实现C++中的多重继承.(他也是为类服务的)
他们同出自Object吧!!
33646321 现在看P400
"BASE CLASS需要一个带有引数的构造函数时使用!"这个问题一楼朋友说的很对.
侯先生译的很清楚啊!!!
我觉得interface 跟 class 是弟兄两个,各有个的用出. interface 和 内隐就是为拉实现C++中的多重继承.(他也是为类服务的)
他们同出自Object吧!!
33646321 现在看P400
|
Java里面接口是为了实现多重继承,纯虚函类是为了实现多态!
再java里面,接口必须由类来实现,纯虚函类如果需要实例化,就必须要子类化,也就是纯虚类不能拥有对象,这个c++一样,不一样的是c++包含的虚函数并不一定是纯虚函数,而java没有这个概念。java中只要一个类中有一个虚函数,那么那个类就是虚类,不能拥有对象。
其实,看你怎么理解了,接口跟类其实是一个东西,这就是说,面向对象编程只是个思想而已,你用c语言,照样可以面向对象编程呢!
再java里面,接口必须由类来实现,纯虚函类如果需要实例化,就必须要子类化,也就是纯虚类不能拥有对象,这个c++一样,不一样的是c++包含的虚函数并不一定是纯虚函数,而java没有这个概念。java中只要一个类中有一个虚函数,那么那个类就是虚类,不能拥有对象。
其实,看你怎么理解了,接口跟类其实是一个东西,这就是说,面向对象编程只是个思想而已,你用c语言,照样可以面向对象编程呢!