日期:2011-03-22 16:17:00 来源:本站整理
java类承当的语法[Java编程]
本文“java类承当的语法[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
担当与Java(以及其他OOP语言)非常精密地结合在一同.我们早在第1章就为大家引入了担当的概念,并在那章之后到本章之前的各章里不时用到,因为一些特别的场所要求必须利用担当.除此以外,成立一个类时必定会举行担当,因为若非如此,会从Java的尺度根类Object中担当.
用于合成的语法是非常简单且直观的.但为了举行担当,必须采取一种全然差别的情势.需求担当的时刻,我们会说:“这个新类和那个旧类差不多.”为了在代码里表面这一见解,需求给出类名.但在类主体的起始花括号之前,需求安排一个关键字extends,在背面跟随“底子类”的名字.若采纳这种做法,便可自动得到底子类的全部数据成员以及办法.下面是一个例子:
这个例子向大家展示了大量特点.首先,在Cleanser append()办法里,字串同一个s衔接起来.这是用“+=”运算符实现的.同“+”一样,“+=”被Java用于对字串举行“过载”处理.//: Detergent.java // Inheritance syntax & properties class Cleanser { private String s = new String("Cleanser"); public void append(String a) { s += a; } public void dilute() { append(" dilute()"); } public void apply() { append(" apply()"); } public void scrub() { append(" scrub()"); } public void print() { System.out.println(s); } public static void main(String[] args) { Cleanser x = new Cleanser(); x.dilute(); x.apply(); x.scrub(); x.print(); } } public class Detergent extends Cleanser { // Change a method: public void scrub() { append(" Detergent.scrub()"); super.scrub(); // Call base-class version } // Add methods to the interface: public void foam() { append(" foam()"); } // Test the new class: public static void main(String[] args) { Detergent x = new Detergent(); x.dilute(); x.apply(); x.scrub(); x.foam(); x.print(); System.out.println("Testing base class:"); Cleanser.main(args); } } ///:~
其次,无论Cleanser还是Detergent都包含了一个main()办法.我们可为自己的每个类都成立一个main().普通倡议大家象这样举行编写代码,使自己的测试代码可以封装到类内.即便在程序中含有数目众多的类,但关于在号令行恳求的public类,只有main()才会得到调用.所以在这种情形下,当我们利用“java Detergent”的时刻,调用的是Degergent.main()——即便Cleanser并非一个public类.采取这种将main()置入每个类的做法,可便利地为每个类都举行单元测试.并且在完成测试今后,毋需将main()删去;可把它保存下来,用于今后的测试.
在这里,大家可看到Deteregent.main()对Cleanser.main()的调用是明确举行的.
需求侧重夸大的是Cleanser中的全部类都是public属性.请记着,假使省略全部拜候指导符,则成员默许为“友好的”.这样一来,就只答应对包成员举行拜候.在这个包内,任何人都可以利用那些没有拜候指导符的办法.比方,Detergent将不会碰到任何麻烦.但是,假定来自别的某个包的类预备担当Cleanser,它就只能拜候那些public成员.所以在筹划担当的时刻,一个对比好的法则是将全部字段都设为private,并将全部办法都设为public(protected成员也答应衍生出来的类拜候它;今后还会深化探究这一问题).当然,在一些特别的场所,我们仍旧必须作出一些调整,但这并非一个好的做法.
注意Cleanser在它的接口中含有一系列办法:append(),dilute(),apply(),scrub()以及print().由于Detergent是从Cleanser衍生出来的(通过extends关键字),所以它会自动得到接口内的全部这些办法——即便我们在Detergent里并未看到对它们的明肯定义.这样一来,便可将担当想象成“对接口的反复操纵”大概“接口的再生”(今后的实施细节可以安闲设置,但那并非我们夸大的重点).
正如在scrub()里看到的那样,可以得到在底子类里定义的一个办法,并对其举行改正.在这种情形下,我们普通想在新版本里调用来自底子类的办法.但在scrub()里,不可只是简单地发出对scrub()的调用.那样便造成了递归调用,我们不肯看到这一情形.为办理这个问题,Java供应了一个super关键字,它引用当前类已从中担当的一个“超类”(Superclass).所以表达式super.scrub()调用的是办法scrub()的底子类版本.
举行担当时,我们并不限于只能利用底子类的办法.亦可在衍生出来的类里加入自己的新办法.这时采纳的做法与在普通类里增添其他任何办法是完好一样的:只需简单地定义它便可.extends关键字提醒我们预备将新办法加入底子类的接口里,对其举行“扩大”.foam()就是这种做法的一个产物.
在Detergent.main()里,我们可看到关于Detergent对象,可调用Cleanser以及Detergent内全部可用的办法(如foam()).
以上是“java类承当的语法[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
- ·上一篇文章:java返回值过载
- ·下一篇文章:java类合成的语法
- ·中查找“java类承当的语法”更多相关内容
- ·中查找“java类承当的语法”更多相关内容
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论