资源预览内容
第1页 / 共38页
第2页 / 共38页
第3页 / 共38页
第4页 / 共38页
第5页 / 共38页
第6页 / 共38页
第7页 / 共38页
第8页 / 共38页
第9页 / 共38页
第10页 / 共38页
亲,该文档总共38页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Java语言程序设计-类与对象教师:段鹏飞面向对象特性Java语言中有三个典型的面向对象的特性:封装性、继承性和多态性。封装的步骤 修改属性的可见性修改属性的可见性 创建创建getter/setter方法方法 在在getter/setter方法中方法中加入属性控制语句加入属性控制语句 1、如何使用封装设为设为private用于属性的用于属性的读写读写 对属性值的对属性值的合法性合法性进行进行判断判断 class Student private float java = 0; private float database=0; private float html=0; public float getJava() return java; public void setJava (int java) if (java 100 | java 0) this.java = 60; System.out.println(“JavaJava成绩在成绩在0和和100之间,默认值是之间,默认值是60); else this.java = java; / 其它其它getter/setter方法方法this代表代表当前对象当前对象 1 1 2 2 2 2 3 3 1、如何使用封装1、如何使用封装类成员(属性和方法)的可见性属性是private访问操作是publicgetXXX()setXXX()普通方法不限制56继承性为什么会有继承?建立一个类后,发现另一个新的类有相同的特性,两个选择:重新定义一个新的类;在已有类的基础上,修改(加加/减减)父类和子类,子类继承(拥有)父类所有的数据和方法,同时子类可以有新的数据和方法,“青出于蓝,而胜于蓝”树型结构(层次化结构)根(基类)2、继承运输工具航空运输工具陆地运输工具水上运输工具人力驱动引擎驱动二轮四轮客运货运2、继承问题:一个类能否继承两个或多个父类?8语法/父类class SuperClass/classbody/子类classThisClassextendsSuperClass/classbody2、继承9class Wheel public void inflate(int i) class Window public void rollup() public void rolldown() class Door public Window window = new Window();public void open()public void close()2、继承与组合class Engine public void start() public void rev()public void stop() public class Car public Engine engine = new Engine();public Wheel wheel = new Wheel4;public Door left = new Door();public Door right = new Door();public Car() for (int i =0; i 4; i+) wheeli = new Wheel();public static void main(String args) Car car = new Car();car.left.window.rollup();car.wheel0.inflate(72);组合: 有一个 (has-a)继承: 是一个 (is-a)102、类的继承父类与子类的关系(extends)基本内容1.子类可调用父类的方法和变量,子类可增加父类中没有的方法和变量2.子类可重新定义父类的静态/实例变量3.子类可重新定义父类的静态/实例方法4.继承中的构造方法5.类成员访问修饰符与继承的关系类的可见性1112类的继承子类可调用父类的方法和变量子类可增加父类中没有的方法和变量class Vehicle String brand;void setB(String s) brand = s; void showB() System.out.println(brand); class Bus extends Vehicle int line;void setL(int l) line = l; void showL() System.out.println(line); Bus b = new Bus();b.setB(“audi”); /*b.setL(710);b.showB(); /*b.showL();子类继承父类的方法和变量,则这些方法和变量就属于子类,则子类对象对这些方法和变量的调用是显而易见的13类的继承子类可重新定义父类中已有的变量父类中同名的变量无效(隐藏)通过“super.变量名”和父类名.变量名(static变量)引用class A int i=256, j =64;static int k = 32;final float e = 2.718f;class B extends A public char j=x;final double k =5;static int e =321;void show() System.out.println(i + “ “ + j + “ “ + k + “ “ + e); void showA() System.out.println(super.j + “ “ + A.k + “ “ + super.e); B b = new B();b.show(); b.showA();256 x 5.0 32164 32 2.718this.变量名this.方法名this()super.变量名super.方法名super()super ? 当前对象/当前对象的父对象/其他14父类子类实例化一个子类对象thissuper调用父类的变量和方法调用子类的变量和方法2、继承中的super对象Name hidingCaseStudy:Hide.java输出:doh(float)doh(char)doh(float)复习封装继承多态接口初始化和类的装载CaseStudy:Beetle.java输出:static Insect.x1 initializedstatic Beetle.x2 initializedBeetle constructori = 9, j = 0Beetle.k initializedk = 63j = 3918表现在继承中方法的重写子类从父类继承(extends扩展)而来多个子类同属一个父类,所有子类有相同的父类继承父类的方法在不同的子类中有不同的表现形式表现在用一个类中方法的重载3、多态性193、多态性在继承中的表现3 多态3.1覆盖3.2向上类型转换3.3绑定早绑定vs晚绑定静态联编vs动态联编3.1 覆盖Override定义:子类的方法覆盖了父类的方法相同的方法签名方法名称输入参数表21多态什么是多态?l多态(Polymorphism),即多种状态,指程序运行时,依据对象所属类,引发对应类的方法,从而有不同的行为实现机制l多态的由向上类型转换和动态绑定机制结合完成3.2 向上转型Method call binding早绑定vs.晚绑定(动态/运行时刻)CaseStudy:Shapes.javaJava中所有的绑定都是晚绑定,除了final的方法.finalfinal:This cannot be changedfinalfordatafinalformethodsfinalforaclassFinal data只能被赋值一次的变量CaseStudy:FinalData.javaFinal methods有两种final方法:1.在方法上加一把锁,防止继承者改变它的意义。2.编译器把对该方法的调用变成inline调用。privateisfinal.Final classesFinalclasses是不允许被继承的。试讨论:Finalfieldsinafinalclass?Finalmethodsinafinalclass?抽象类和抽象方法一个类的作用仅仅是表达接口,而不是具体的实现细节抽象的方法是不完全的,它只是一个申明,没有方法体.包含一个抽象方法的类被称作抽象类,抽象类必须要用abstract声明.不能制造抽象类的对象.从抽象类继承的类必须override所有的抽象方法,否则它自己成为一个抽象类.可以申明一个抽象类但是里面没有一个抽象方法.Case:Shapes2.java抽象类与接口31接口是对abstract类的进一步扩展接口中的方法都是未实现的(类似于抽象方法),目的是在实现接口的类之间建立一种协议接口中的变量都是常量定义一个类符合某个或一组接口,利用implements public interface 接口名 成员变量;方法声明; class 类名 implements 接口1, 接口2 接口实现interface实现interface的类,其interface中所有的方法必须被“实现”,否则这个类成为一个抽象类。所有实现interface中的方法必须被申明为public.Interface可以从多个interface得到继承,但是不能继承类.一个类可以实现多个interface.An class implements an interface to have the interface. 33无修饰但在实现接口方法的类中,修饰符为publicinterface Figure double half=0.5,pi=3.14159; void parameter(); void area();class Triangle implements Figure double b, h; Triangle (double u, double v) b = u; h = v; public void parameter() System.out.println(b + “ “ + h); public void area() System.out.println(half*h*b); class Circle implements Figure double x, y, r; Circle(double u, double v, double m) x=u; y=v; r=m; public void parameter() System.out.println(x+“ “+y+“ “+r); public void area() System.out.println(pi*r*r); Triangle t = new Triangle(2, 3);Circle c = new Circle(4, 5, 6);Figure f = t, c;for (int i =0; i f.length; i+) fi.parameter();fi.area();4、接口方法练习1、关于被私有访问控制符private修饰的成员变量,以下说法正确的是(A)可被三种类引用:该类自身、与它在同一个包中的其他类、在其他包中的该类的子类(B)可以被两种类访问和引用:该类本身、该类的所有子类(C)只能被该类自身所访问和修改(D)只能被同一个包中的类访问2、下列代码是否存在问题?publicclassTestlonga=newlong10;publicstaticvoidmain(Stringarg)System.out.println(a6);练习3、下面哪个函数是publicvoidexample().的重载函数()(A)publicdoubleexample2(intm).(B)publicintexample().(C)publicvoidexample2().(D)publicintexample(intm,floatf).4、抽象方法必须在抽象类中,所以抽象类中的方法都必须是抽象方法?5、一个Java类可以有多个父类?6、接口里的方法必须全部都声明成abstract?7、最终类不能派生子类,最终方法不能被重载?8、在Java程序中,通过类的定义只能实现_重继承,但通过接口的定义可以实现_重继承关系。9、_方法是一种仅有方法头,没有具体方法体和操作实现的方法,该方法必须在抽象类或接口之中定义。_方法是不能被当前类的子类重新定义的方法。练习10、写出执行结果练习11、设计一个程序,表达各种读物、如小说、杂志、期刊、课本等,每种读物有相同的属性,如页数、价格等,也有不同的属性,如杂志和期刊都有出版周期,而课本有适合对象(读者)。写一个测试类的main()来产生一些列随机的读物,并输出它们的信息。谢谢
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号