|
把一个事物搞的越不具体 就是越抽象.. 比如一个人的抽象是动物 .再抽象点是哺乳类. ..等等.. 定义了一个抽象的父类 里面可以有一些抽象的方法 然后再定义子类来实现这些方法.. 用abstract 来修饰抽象. . 如 abstract class Test //定义抽象类 { private String name; Test(String n) { name=n; }
public abstract String gethaha(); //定义一个抽象的方法. }
抽象类是不能实例对像的.. 可以定义一个抽象类的对象变量,但是他只能引用非抽象子类的对象 如: Test a=new Employee("xiaoqiao",9000);
import java.text.*; import java.util.*; public class PersonTest { public static void main (String[] args) { Person [] staff=new Person[2]; staff[0]=new Employee("郑成桥",5000,1989,05,06); //这里注意 Person是抽象的类 不能实例对象,可以定义一个抽象类的对象变量,但是他只能引用非抽象子类的对象 staff[1]=new Student("哈哈啊","你好吗"); for(Person e:staff) { System.out.println(e.getName()+"\t"+e.getDescription()); } } }
abstract class Person //定义一个抽象的类 { private String name; public Person(String n) { name=n; } public abstract String getDescription();//定义一个抽象的方法 public String getName() { return name; }
} class Employee extends Person //Employee实现这个抽象的类 { private double salary; private Date hireDay; public Employee(String n,double s,int year,int month,int day) { super(n); salary=s; GregorianCalendar calendar =new GregorianCalendar(year,month -1,day); hireDay=calendar.getTime(); } public double getSalary() { return salary; } public Date getHireDay() { return hireDay; } public String getDescription() { return String.format("an employee with a salary of $%.2f",salary); } public void raiseSalary(double byPercent) { double raise=salary*byPercent/100; salary+=raise; } } class Student extends Person { private String major; public Student(String n,String s) { super(n); major=s; } public String getDescription() { return "a student majoring in"+major; } }
__作者: 郑成桥
1 2import java.util.*; 3public class ManagerTest 4{ 5 public static void main (String[] args) 6 { 7 Manager boss=new Manager("xiaoqiao",8000,1989,04,11); 8 boss.SetBonus(5000); 9 Employee [] staff=new Employee[3]; 10 staff[0]=boss; //父类 可以被子类转换 .... 但是子类 不能被父类转换. 11 staff[1]=new Employee("dddd",5000,1989,10,12); 12 staff[2]=new Employee("aaaaa",4000,1988,11,12);
if(staff[1] instanceof Manager) //staff[1] 能不能 (instanceof)转换为: Manager /* 我试图把staff[1]转换为Manager 但是失败了 */ { Manager aa=(Manager)staff[1]; } else { System.out.println("不能装换"); }
13 14 for(Employee e:staff) 15 System.out.println("mingzi \t"+e.getName()+"\t gongzi \t"+e.getSalary()+"\t shengri \t"+e.getHrireDay()); 16 } 17 18} 19class Employee 20{ 21 public Employee(String n,double s,int year,int month,int day) //首先我们传5个参数 22 { 23 name=n; 24 salary=s; 25 GregorianCalendar calendar =new GregorianCalendar(year,month -1,day); 26 hireDay=calendar.getTime(); 27 } 28 public String getName() //得到名字 29 { 30 return name; 31 } 32 public double getSalary() //得到工资 33 { 34 return salary; 35 } 36 public Date getHrireDay() //得到年龄 37 { 38 return hireDay; 39 } 40 public void raiseSalary(double byPercent) 41 { 42 double raise=salary*byPercent/100; 43 salary+=raise; 44 } 45 private String name; 46 private double salary; 47 private Date hireDay; 48} 49class Manager extends Employee //定义一个 Manager 类继承 Employee 50{ 51 /**//** 52 @parm n the employee's name 53 @parm s the salary 54 @parm year the hire year 55 @parm month the hire month 56 @parm day the hire day 57 */ 58 public Manager(String n,double s,int year,int month,int day) 59 { 60 super(n,s,year,month,day); //关键字 继承Employee 里的方法 61 bonus=0; 62 } 63 public double getSalary() //定义一个方法重载.. 64 { 65 double baseSalary=super.getSalary(); 66 return baseSalary+bonus; //就是在工资的基本上加上奖金 67 } 68 public void SetBonus(double b) //定义一个方法 存储奖金 69 { 70 bonus=b; 71 } 72 private double bonus; 73}
动态的绑定的意思 . 假如 调用 x.f("Hello") 编译器会挑 x.f(String) 不会挑x.f(int) 假如你子类想覆盖 父类的方法 . 那么方法返回的类型必须是一样的 比如: Employee 类中有 public Employee gethaha() { ........... } 那么在后面的 Manager中可以 按照一样的方法 public Manager gethaha() { ........... } 如果你想要覆盖一个父类的方法的时候. 你的子类的方法不能低于父类的可见性 比如.父类是 public . 那么你子类覆盖他 也必须是 public 否则会出现错误的... 今天继承就写这么多. 如果你想阻止继承的话. 就用 final 修饰符.. 可以看看下面的代码就会懂了
public class Test //假如在这加一个final就会报错. 因为一个被final修饰的类 是不能继承的. { private String name; private double salary; Test(String name,double salary) { this.name=name; this.salary=salary; } public final String getName() //假如在这加一个 final 编译不会影响什么. 因为子类没有覆盖这个方法 { return name; } public double getsalary() //然而我们在这加一个 final 编译就会报错了.因为子类覆盖了这个类. { return salary; } public static void main (String[] args) { Test1 t1=new Test1("xiaoqiao",80000); t1.aaa(600); System.out.println("小桥="+t1.getName()+"\t"+t1.getsalary()); } } class Test1 extends Test { private double bb; public Test1(String name,double salary) { super(name,salary); } public double getsalary() { double aa=super.getsalary(); return aa+bb; } public void aaa(double bb) { this.bb=bb; } }
___作者: 郑成桥
只针对Java2平台-而且是在国内可以找到的中文版的,其实书好不好是见仁见智的(高手可以去看Sun的开发文档,这也可以理解)--这只是一家之见而已--欢迎大家点评。 第一名:Java编程思想第二版(Thinking in java second)-包含范围:全部。 没说的--绝对的大师作品--当之无愧的第一--第一版时就享誉整个java界(当时网上好象也有人译了)--国内版是京京工作室翻译的-基本上毁了此书--错误术语太多-推荐高手看E文版,新手就不要先看此书了。第二版更精采--台湾的侯捷译了此书-可以到www.csdn.net看看前几章的中文版(不过是台湾术语)。希望国内会快些引入此书,你也可到http://www.BruceEckel.com--作者的主页免费下载此书推荐http://www.bdelmee.easynet.be/java/index.html--有chm格式的--非常棒!BTW:这位大师最近在写Thinking in Python相信又是一本经典名著:)
第二名:Java2编程详解(special edition java2)-包含范围:全部--这本书会排在core java2的前面可能很多人会不同意--但是就中译本和内容来看非常全面-适合新手成为高手-虽然国内的价位高了些(150)-但基本还是值得的--该有的内容都有了,做参考书也很不错-BTW-这个系列中的oracle8/8i使用手册也是一本很经典的书--同样推荐。
第三名:Java2核心技术卷一,二(core java2 volume1,2)-包含范围-全部 这两本我把它们看成一本不会有人有异议吧-这也是Sun的官方的书-我觉得相对来说-第二卷高级特性要比第一卷基础知识好(第一卷又是京京工作室译的--真影响情绪:()-内容同样很全面--但是卷一虽说是基础知识,同样对新手来说不是很合适--感觉条理性不强-而且内容有些混杂-但第二卷完全可以弥补这些---精辟而细致-很适合有一定基础的Java程序员看。
第四名:Java 2图形设计 卷1:AWT 卷2:Swing-Graphic Java 1.2 Mastering the JFC Volume I:AWT SWING 3rd Edition包含范围--Java图形设计--没什么说的了--尽管图形设计不如J2EE那么火 ,而且Win32下做应用程序也不是java的强项--但是AWT和Swing仍然是Java程序员的必修课--看这两本就够了--看看厚度就知道了--而且这也是Sun官方出的图书。
第五名:J2EE构建企业系统??专家级解决方案 包含范围J2ee清华大学出版社译作者: [美]Paul J. Perrone,et al.著 张志伟等译--又是一本极厚的书1038页,105元--不过内容十分丰富--适合想对J2EE整体做了解的程序员,至于每项都想精就不太可能了-呵呵-毕竟在Java中思想是主要的。在这类中有本Java服务器高级编程也很不错-机工华章出的-wrox系列中的。
第六名: Java XML编程指南 电子工业出版社译作者: [美]Tom Myers,Alexander Nakhimovsky著包含范围Java+XML-XML在Java中的地位也越来越重要了--而国内能看到的还有一本中国电力出的o eilly的Java和XML--最后我还是选了这本wrox的,当然你要是想好好学学XML本身-还是看看那本XML高级编程吧--wrox系列中的-机工华章出的。
第七名:书名:Jini核心技术英文原书名: Core Jini 作者: W.Keith Edwards 包含范围Jini--Jini也是Java体系中很重要的部分--而且更重要的是这本可能是国内唯一的一本Jini专著-翻译的也不错--在我看来是当之无愧的经典-同样是Sun的官方图书--内容很清晰透彻。
第八名:Enterprise JavaBeans第二版英文原书名: Enterprise JAVABEANS 作者: (美)Richard Monson-Haefel包含范围EJB --O‘reilly出的--ejb的重要性我不用多说了吧--尽管有人说这本译的不好--但是同样它是国内目前唯一的EJB专著-o eilly的书就是只讲一方面或一项技术-很细-但价格也不菲,这本书的架构还可以--值得一看。
第九名:数据结构与算法分析(Java版)译作者: [美]Clifford A.Shaffer著 张铭 刘晓丹译包含范围Java算法--尽管基本上Java图书都是讲Java本身的特性--因为Java的体系太庞大了--而用Java来实现的数据结构与算法--这本书也是唯一一本---所以尽管这本不是那么的好但还是做以推荐。
第十名:软件工程Java语言实现-英文原书名: Software Engineering with Java 作者: Stephen R.Schach 译者: 袁兆山等--这本书没什么多说的--纯理论性的东西--但软件工程的重要也是有目共睹的-而且同样是这个领域中唯一的一本Java书。
补充一本:Java2编程起步Java2:A beginner guide译作者: [美]Herbert Schildt著 史兴华译-写了这么多才发现还没有为Java新手选一本书--这里是指对那些一窍不通而又想学的--(不久前的我呵呵)--看了几本后-包括Java2从入门到精通,21天学通java2-第二版后--还是选了这本--我觉得这本是最好的java入门书--好在哪里--看了就知道:)
后记:这十本不一定是最好的-只是我的个人看法-难免有误--而且Java的很多方面还没有包括进去--比如JSP--wrox有本JSP编程指南-但不是特别好-所以没有把它评进去,也没有看到太经典的JSP书--同样J2ME也没有好书只有本Palm应用程序设计??使用Java语言太薄了。还有本Java 2平台安全技术-结构,API设计和实现-是讲Java2安全的-同样很薄-Java2类库增补版--太贵不如去看文档。还有Jbuilder,Websphere等应用服务器,CORBA等其他和Java有关的方面都有些不错的书--在此就不多写了--不足之处请大家指出-也希望对大家有所帮助
|