JAVA程序设计类与对象续.ppt

上传人:牧羊曲112 文档编号:6510029 上传时间:2023-11-07 格式:PPT 页数:71 大小:5.38MB
返回 下载 相关 举报
JAVA程序设计类与对象续.ppt_第1页
第1页 / 共71页
JAVA程序设计类与对象续.ppt_第2页
第2页 / 共71页
JAVA程序设计类与对象续.ppt_第3页
第3页 / 共71页
JAVA程序设计类与对象续.ppt_第4页
第4页 / 共71页
JAVA程序设计类与对象续.ppt_第5页
第5页 / 共71页
点击查看更多>>
资源描述

《JAVA程序设计类与对象续.ppt》由会员分享,可在线阅读,更多相关《JAVA程序设计类与对象续.ppt(71页珍藏版)》请在三一办公上搜索。

1、主讲教师:杨祥茂,2012年2月,教学辅助课件,教学辅助课件,JAVA程序设计,复习类与对象,1 概念定义2 描述形式3 关键知识点封装,构造方法,引用传递,this,static,对象数组4 典型例子火车的描述(链),特征,1 一个火车是由若干车厢组成,每节车厢由数据和连接组成2 每个火车节点的类包括(数据和指针)组成所以:属性包括data 和next行为包括(1)构造方法(2)4个set和get语句,class Nodeprivate String data;private Node next;public Node(String data)this.data=data;public St

2、ring getData()return this.data;public void setNext(Node next)this.next=next;public Node getNext()/实际上取得下一个节点的地址return this.next;public class nodetestpublic static void main(String args)Node root=new Node(火车头);/定义火车头Node n1=new Node(A车厢);/第一节火车Node n2=new Node(B车厢);/第二节火车 Node n3=new Node(C车厢);/第三节火车

3、 root.setNext(n1);/连接火车头与第一节火车 n1.setNext(n2);n2.setNext(n3);print(root);public static void print(Node node)(输出数据);while(node!=null)System.out.print(node.getData()+t);node=node.getNext();,在现实中假定有一个人Person类,student类,可以分析得到:Student类的属性和Person属性可以得到Person属性有name和ageStudent类有属性name,age,school三个属性写成java的

4、类就是,Class Person,Class Person private String name;private int age;public String getName()return name;public void setName(String name)this.name=name;public int getAge()return age;public void setAge(int age)this.age=age;,Class student,Class Student private String name;private int age;private String sc

5、hool;public String getName()return name;public void setName(String name)this.name=name;public int getAge()return age;public void setAge(int age)this.age=age;public String getSchool()return school;public void setSchool(String school)this.school=school;,问题,在student类中,存在在Person类中的属性name和age,且有相同的set和ge

6、t方法。现在希望在定义student类的时候,保留Person类中属性和方法。-继承,继承,类的继承格式:class 父类/定义父类.class 子类 extends 父类/子类继承父类 例如,类继承示例,class Personprivate String name;private int age;public String getName()return name;public void setName(String name)this.name=name;public int getAge()return age;public void setAge(int age)this.age=a

7、ge;class Student extends Person/不写任何代码,只是继承父类public class extendtest1public static void main(String args)Student stu=new Student();stu.setName(张三);/访问父类的方法stu.setAge(20);/访问父类的方法(姓名:+stu.getName()+年龄:+stu.getAge();,类继承,在子类中添加自己的属性和方法,class Personprivate String name;private int age;public String getN

8、ame()return name;public void setName(String name)this.name=name;public int getAge()return age;public void setAge(int age)this.age=age;class Student extends Personprivate String school;public void setSchool(String school)this.school=school;public String getSchool()return school;public class extendtes

9、t1public static void main(String args)Student stu=new Student();stu.setName(张三);/访问父类的方法stu.setAge(20);/访问父类的方法stu.setSchool(西南财经大学);(姓名:+stu.getName()+年龄:+stu.getAge()+学校:+stu.getSchool();,类继承要注意的地方,1 只允许多层继承,不允许多重继承。例如 class A class B class c extends A,B/同时继承两个类,是不允许的 又如 class A.class B extends A/

10、允许多层继承 classs c extends B/允许多层继承2 定义 继承的子类叫做派生类3 子类不能直接访问父类的私有成员,但是可以调用父类的非私有方法,可以通过get来访问父类的私有成员。例如;,子类访问限制,不能直接访问父类中的属性(成员),class Student extends Personprivate String school;public void setSchool(String school)this.school=school;public String getSchool()return school;public void fun()(父类的name 属性+n

11、ame);/错误,无法访问(父类的age 属性+age);/错误,子类可以间接访问属性内容,class Student extends Personprivate String school;public void setSchool(String school)this.school=school;public String getSchool()return school;public void fun()(“父类的name 属性”+getName();/间接访问(“父类的age 属性”+getAge();/间接,继承的问题1:子类对象实例化过程,子类对象实例化的过程是先调用父类的构造方法

12、,再调用子类的构造方法(就是先有父亲的行为再有儿子的行为)。例如,观察子类对象实例化过程,class Personprivate String name;private int age;public Person()(这是父类的构造方法);public String getName()return name;public void setName(String name)this.name=name;public int getAge()return age;public void setAge(int age)this.age=age;class Student extends Person

13、private String school;public Student()(这是子类的构造方法);public void setSchool(String school)this.school=school;public String getSchool()return school;public void fun()(父类的name 属性+getName();/(父类的age 属性+getAge();/public class extendtest1public static void main(String args)Student stu=new Student();stu.setNa

14、me(张三);/访问父类的方法,子类没有定义stu.setAge(20);/访问父类的方法,子类没有定义stu.setSchool(西南财经大学);/子类定义的方法(姓名:+stu.getName()+年龄:+stu.getAge()+学校:+stu.getSchool();,说明,上述的子类调用父类的构造方法,先执行父类的构造方法再执行子类的构造方法。上述程序中的构造方法public Student()(这是子类的构造方法);实际上在子类的构造方法中是这样的 public Student()super();/调用父类的无参构造方法(“子类的构造方法”);,继承问题2:继承父类中的方法覆写,继

15、承父类中的方法覆写是指子类定义与父类相同名的方法。在覆写父类的方法中要考虑子类覆写的方法不能拥有比父类方法更严格的方法权限。前面介绍的权限Private default(缺省)public在父类中使用了public,则在子类中必须使用public,否则编译将出错。,例如,方法覆写(覆写权利扩大),class Personvoid print()/定义一个默认的访问权限的方法System.out.println(Person-void print();class Student extends Person/继承public void print()/覆写方法 System.out.printl

16、n(Student-public void print();public class overridedemopublic static void main(String args)new Student().print();/执行被覆写的方法,覆写权利缩小,不能被编译,class Personpublic void print()/定义一个默认的访问权限的方法System.out.println(Person-void print();class Student extends Person/继承 void print()/覆写方法,覆写权利缩小 System.out.println(Stu

17、dent-public void print();public class overridedemopublic static void main(String args)new Student().print();/执行被覆写的方法,还是可以调用父类中被覆写的方法,在子类中使用super 关键字,例如class Personvoid print()/定义一个默认的访问权限的方法System.out.println(Person-void print();class Student extends Person/继承 void print()/覆写方法 super.print();/调用父类中

18、的方法 System.out.println(Student-public void print();public class overridedemopublic static void main(String args)new Student().print();/执行被覆写的方法,继承中的属性覆写,少用,不讲,就是在继承中,子类中新属性名与父类中属性名相同,使用时采取就近原则,本类中的属性的使用用:This.属性名父类中的属性的使用用:Super.属性名,方法重载与方法覆写的比较,方法重载 方法覆写定义不同 方法名相同、参数类型与个数不同 方法名、参数类型、返回值全相同 对权限没有要求

19、覆写的方法不能拥有更严格权限范围不同 发生在一个类中 发生在继承类中,super关键字的作用,使用super可以调用父类中的构造方法,普通方法,属性。在子类中访问父类的属性 super.属性名 在子类中调用父类中的普通方法 super.方法名(参数);在子类中构造方法中调用父类中的构造方法 在子类的构造方法的第一行 写 super(参数值)例如,class Personprivate String name;private int age;public Person(String name,int age)this.setName(name);this.setAge(age);public S

20、tring getName()return name;public void setName(String name)this.name=name;public int getAge()return age;public void setAge(int age)this.age=age;public String getInfor()return 姓名:+this.getName()+年龄:+this.getAge();class Student extends Person/继承 private String school;public Student(String name,int age

21、,String school)super(name,age);/调用父类的构造方法 this.setSchool(school);public void setSchool(String school)this.school=school;public String getSchool()return school;public String getInfor()/覆写方法 return super.getInfor()+学校:+this.getSchool();public class superdemopublic static void main(String args)Student

22、stu=new Student(张三,20,西南财经大学);System.out.println(stu.getInfor();,This 与super 区别,final关键字的应用,在java中final表示最终的意思。常用来声明类、属性、方法。声明时要注意的是:1 使用final声明类不能有子类2 使用final声明方法不能被子类所覆写3 使用final声明变量就是常量,不能被修改,Final 声明类,不能有子类,Final class AClass B exrends A/编译出错,因为不能 有子类,声明方法不能被子类覆写,class A public final void print(

23、)System.out.println(“Hello”);class B extends A public final void print()/子类不能覆写final方法 System.out.println(“swufe”);,Final修饰成为常量,class A private final infor=“hello”;public final void print()infor=“swufe”;/错误,不能修改常量,使用 final注意事项,final声明变量时,其变量名要求全部为大写字母,一般使用的技巧是 public static final 类型 变量名=变量值;作为全局变量使用

24、。,对象的另一个重要概念,多态性,在java 中多态性体现为(1)方法的重载与覆写(2)对象的多态性下面说说对象的多态性(1)把子类对象类型转换为父类对象类型(2)把父类对象类型转换为子类对象类型规范:子类转换为父类 父类 父类对象=子类对象实例;父类转换为子类 子类 子类对象=(子类)父类对象实例,子类对象转换为父类对象,class Apublic void fun1()System.out.println(A-public void fun1();public void fun2()this.fun1();class B extends Apublic void fun1()/覆写父类方法

25、System.out.println(B-public void fun1();public void fun3()System.out.println(B-public void fun3();public class samplepublic static void main(String args)B b=new B();/子类实例化 A a=b;/子类向父类转换,多态性 a.fun1();/此方法被子类覆盖过不能调用 a.fun3(),父类对象转换为子类对象,class Apublic void fun1()System.out.println(A-public void fun1()

26、;public void fun2()this.fun1();class B extends Apublic void fun1()/覆写父类方法System.out.println(B-public void fun1();public void fun3()System.out.println(B-public void fun3();public class samplepublic static void main(String args)A a=new B();/子类向父类对象转换,不能使用A a=new A()B b=(B)a;/父类对象向子类对象转换,多态性 b.fun1();/

27、此方法被子类覆盖过 b.fun2();/调用父类的方法 b.fun3();/调用子类自己定义的方法,instanceof关键字,在java中使用instanceof判断对象是属于哪个类的。规范是对象名 instanceof 类 返回一个true或者false例如,Instanceof的应用,class Apublic void fun1()System.out.println(A-public void fun1();public void fun2()this.fun1();class B extends Apublic void fun1()/覆写父类方法System.out.printl

28、n(B-public void fun1();public void fun3()System.out.println(B-public void fun3();public class samplepublic static void main(String args)A a=new B();/子类向父类对象转换,不能使用A a=new A()System.out.println(A a=new B()+(a instanceof A);System.out.println(A a=new B()+(a instanceof B);A a2=new A();System.out.printl

29、n(A a=new A()+(a2 instanceof A);System.out.println(A a=new A()+(a2 instanceof B);,抽象类,前面对类的继承,可以实现从父类派生出新类,继承父类的属性与方法在java中,也可以创建一种专门用来当成父类,称谓“抽象类”。作用类似“模板”。目的是要设计者依据它的格式来修改并创建新的类。但是并不能直接由抽象类创建对象,只能通过抽象类派生出新类,再由新类来创建对象注意:一个子类只能继承一个抽象类。抽象类的定义格式:abstract class 抽象类名 属性;访问权限 返回值类型 方法名(参数)/普通方法 return 返回

30、值 访问权限 abstract 返回值类型 方法名(参数);/抽象类/在抽象方法中没有方法体,使用抽象类的说明,包含一个抽象方法的类必须是抽象类抽象类与抽象方法使用abstract来声明抽象方法只需要声明,不需要代码实现抽象类必须被子类继承,子类必须覆写抽象类中的全部抽象方法例如,定义抽象类,abstract class A/定义抽象类public static final String FLAG=SWUFE;private String name=aaaa;public String getName()return name;public void setName(String name)t

31、his.name=name;public abstract void print();/定义抽象方法,继承抽象类,class B extends Apublic void print()/覆写父类的抽象方法System.out.println(FLAG-+FLAG);(姓名:+super.getName();public class samplepublic static void main(String args)B b=new B();b.print();,注意的问题,1 一个抽象类不能使用final关键字来声明,因为如果使用了final,则不能覆写,而抽象类要求子类要覆写抽象方法。2 一

32、个抽象类可以定义构造方法。,接口,接口是java中最重要的概念之一。可以理解为特殊的类,是由全局常量和公共抽象方法组成。常用来制定标准。接口的定义格式 interface 接口名 全局常量;抽象方法;注意:在接口中的抽象方法必须为public 权限。是不可以改变的。即使在方法前面不写public,也是public权限。,接口的示范,interface A public static final String school=“西南财经大学”;public abstract void print();public abstract String getInfor();可以简化为(等价上述描述):i

33、nterface A String school=“西南财经大学”;void print();String getInfor();,接口中是抽象方法,要通过子类来实现,办法是implement 实现接口,实现接口的格式 class 子类 implement 接口A,B例如,接口的示范,interface Apublic String Author=swufe;/定义全局变量public void print();/定义抽象方法public String getInfor();/定义抽象方法interface Bpublic void say();class X implements A,B/实

34、现接口public void say()System.out.println(Hello,world!);public String getInfor()return HELLO;public void print()(作者:+Author);public class interfacedemopublic static void main(String args)X x=new X();x.say();x.print();一个子类同时实现了两个接口,覆写两个接口中的抽象方法。,继承抽象类实现接口,interface Apublic String Author=swufe;/定义全局变量pub

35、lic void print();/定义抽象方法public String getInfor();/定义抽象方法abstract class B/定义抽象类public abstract void say();class X extends B implements A/实现接口同时继承public void say()/覆写抽象类中的抽象方法System.out.println(Hello,world!);public String getInfor()/覆写接口A中的抽象方法return HELLO;public void print()/覆写接口A中的抽象方法(作者:+Author);p

36、ublic class interfacedemopublic static void main(String args)X x=new X();/实例化子类对象x.say();/调用被覆写过的方法x.print();/调用被覆写过的方法,抽象类实现接口,interface Apublic String Author=swufe;/定义全局变量public void print();/定义抽象方法public String getInfor();/定义抽象方法abstract class B implements A/定义抽象类实现接口public abstract void say();cl

37、ass X extends B/实现继承public void say()/覆写抽象类中的抽象方法System.out.println(Hello,world!);public String getInfor()/覆写接口A中的抽象方法return HELLO;public void print()/覆写接口A中的抽象方法(作者:+Author);public class interfacedemopublic static void main(String args)X x=new X();/实例化子类对象x.say();/调用被覆写过的方法x.print();/调用被覆写过的方法,接口的继

38、承,interface Apublic String Author=swufe;/定义全局变量public void printA();/定义抽象方法interface B/定义接口public void printB();/定义抽象方法interface C extends A,B/接口C继承A,Bpublic void printC();class X implements C/实现接口public void printA()/覆写抽象方法System.out.println(printA_Hello,world!);public void printB()/覆写接抽象方法System.o

39、ut.println(printB_HELLO);public void printC()/覆写接口C中的抽象方法System.out.println(printC_作者:+Author);public class interfacedemopublic static void main(String args)X x=new X();/实例化子类对象x.printA();/调用被覆写过的方法x.printB();/调用被覆写过的方法x.printC();,抽象类与接口的应用,抽象类的实例化,abstract class Apublic abstract void printA();/定义抽象

40、方法class B extends A/子类继承抽象类public void printA()(子类继承抽象类);public class abstractdemopublic static void main(String args)A a=new B();/通过子类为抽象类实例化a.printA();/调用被覆写过的方法,interface Apublic abstract void print();/定义抽象方法class B implements A/子类实现接口public void print()System.out.println(HELLO);public class inte

41、rfacedemopublic static void main(String args)A a=new B();/通过子类为接口实例化a.print();/调用被覆写过的方法,抽象类的实际应用模板设计,假设人分为学生,和工人.学生和工人的说话的内容是不一样的。则,可以利用abstract来实现这个场景.先定义一个抽象的Person类,学生和工人继承 Person类则,abstract class Person就是一个抽象类。,abstract class Personprivate String name;private int age;public Person(String name,i

42、nt age)this.name=name;this.age=age;public String getName()return name;public int getAge()return age;public void say()System.out.println(this.getContent();public abstract String getContent();/抽象方法没有方法体 class Student extends Personprivate float score;public Student(String name,int age,float score)supe

43、r(name,age);this.score=score;public String getContent()return 姓名+super.getName()+年龄+super.getAge()+成绩:+this.score;class Worker extends Personprivate float salary;public Worker(String name,int age,float salary)super(name,age);this.salary=salary;public String getContent()return 姓名+super.getName()+年龄+s

44、uper.getAge()+薪水:+this.salary;public class abstractdemopublic static void main(String args)Person p1=null;Person p2=null;p1=new Student(张三,20,99.0F);p2=new Worker(里斯,45,3000F);p1.say();p2.say();,接口的应用制定标准,在经济管理中,符合什么规范的就进入,那么规范就是标准,标准就用接口来实现。例如,在市场经济中,例如,在产品的设计,也是采用标准来进行采购。例如,汽车生产商采购零部件就是这样的思路。例如,银行

45、的电子货币交易就是制定标准,其他公司生产产品卖给用户,让用户来使用。所以,在本科学习阶段,.例如,在计算机上USB接口就是标准,这种思路适合非民族的产品,就是说中国独特的就是世界的。,interface USB/定义USB接口public void start();public void end();class Computer/计算机提供USB接口public static void plugin(USB usb)/只要是USB 接口都可以进入usb.start();(-USB设备工作中-);usb.end();class Flash implements USBpublic void st

46、art()System.out.println(U盘开始工作);public void end()System.out.println(U盘结束工作);class Print implements USBpublic void start()(打印机开始工作);public void end()(打印机结束工作);public class interfacedemo1 public static void main(String args)Computer.plugin(new Flash();/插入U盘 Computer.plugin(new Print();/插入打印机,Object类,在

47、JAVA中提供了一个公共的父类Object类,一个类如果没有说明是继承哪个类,则一定是Object类的子类。下面的代码是一样的含义 class Person extends Object class Person那么,Object的用处是什么?主要是Object类提供了很多方法,供开发者使用主要的几个方法有:,(1)应用Object类中的toString()方法取得对象信息,class Personprivate String name;private int age;public Person(String name,int age)this.name=name;this.age=age;p

48、ublic String toString()return 姓名:+this.name+年龄:+this.age;public class objectdemo1public static void main(String args)Person p=new Person(张三,20);(对象信息:+p);,在上述程序中使用了object类中的方法toString,在输出对象时调用的是被子类覆写过的toString()方法。,(2)Object 类中的equals()方法,equals()方法就是进行两个对象的地址的比较例如:已经在串中介绍过了。,接受任意类型的对象,Object是任意类型的父

49、类,则所有对象都可以向Object转换,就是说一切引用类型都可以使用Object进行转换。,Object接受接口类型,interface Apublic String getInfor();class B implements Apublic String getInfor()return Hello,world!;public class objectdemo2public static void main(String args)A a=new B();/为接口实例化Object obj=a;/对象向上转型A x=(A)obj;/对象向下转型System.out.println(x.get

50、Infor();,使用Object接受数组,public class objectdemo3public static void main(String args)int t=1,3,5,7;/定义数组Object obj=t;/接收数组print(obj);/专递数组引用public static void print(Object obj)if(obj instanceof int)int x=(int)obj;for(int i=0;ix.length;i+)System.out.print(xi+t);,Object常用在方法参数中,它可以接受任意类型的引用数据,包装类,一切都是对象,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号