• / 29
  • 下载费用:10 金币  

第4章 深入学习Java面相对象程序设计.ppt

关 键 词:
第4章 深入学习Java面相对象程序设计.ppt
资源描述:
第4章 深入学习Java面向对象程序设计,4.1 类与类的关系 4.2 类的继承 4.3 抽象类 4.4 接口,4.1 类与类的关系,使用关系例如:myDate与usingDate 包含关系 一个类的对象作为另外一个类的成员变量 继承关系,class 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(){} },包含: Car类包含 Engine、Wheel等类,public class Car {public Engine engine = new Engine();public Wheel[] wheel = new Wheel[4];public Door left = new Door();public Door right = new Door();public Car() {for (int i =0; i 4; i++) wheel[i] = new Wheel();}public static void main(String args[]) {Car car = new Car();car.left.window.rollup();car.wheel[0].inflate(72);} },class Engine {public void start() {}public void rev(){} public void stop() {} },继承关系,一个类可以继承其他类的所有成员,还可 以拥有自己的成员。被继承的类称为父类, 由继承生成的类称为子类。继承的优点:提高程序的可重复性,可扩充性;提高程序的可维护性。,4.2 类的继承,问题1:如何编写子类?即如何通过继承的方式编写类? 问题2:关于继承的一些规定。 问题3:构造函数的继承与super关键字。 问题4:子类对象的实例化过程。 问题5:关于方法的覆盖。,public class Point{final static Point origin=new Point(0,0); public int x;public int y;public Point(){}public Point(int x,int y){ this.x=x; this.y=y; }public double distance(){ return Math.sqrt(x*x+y*y); }public static void draw() { System.out.println(“Point: a point.“); }public static Point getOrigin(){ return origin; } },class ColorPoint extends Point {int color;ColorPoint() { super(); }ColorPoint(int x,int y,int c){ super (x,y); this.color=c; }public static void draw(){ System.out.println(“ColorPoint: a color point.“); }},class MapPoint extends ColorPoint {String name;MapPoint() { super(); }MapPoint(int x,int y,int c,String name){ super (x,y,c); this.name=new String(name); }public static void draw() {System.out.println(“MapPoint: a map color point.“);} },通过继承创建类,类继承是用关键字extends来实现的 public class ColorPoint extends Point { … } 问题: ColorPoint类中有哪些变量和方法?,子类,父类,,,关于继承的一些规定,Java只支持单继承。(单继承?) 可以有多层继承。 子类继承父类的所有非private的成员变量和成员函数,但不继承构造函数。 子类可以重写父类的某些成员函数,称为方法的覆盖。,方法的覆盖,方法的覆盖是在子类中重新编写了和父类中函数名、参数表相同的成员函数,这时,子类中的函数将会覆盖父类中的同名函数。问题:前面的ColorPoint和Point之间有无方 法覆盖?,继承关系中的构造函数,子类不能继承父类的构造函数。 在子类的构造函数中可用super(参数列表)显示地调用父类的构造函数。必须是构造函数的第一句。ColorPoint() { super(); }ColorPoint(int x,int y,int c){ super (x,y); this.color=c; },this关键字,在子类的构造函数中可用super(参数列表)显示地调用父类的构造函数。也可以用this (参数列表)调用本类的其他构造函数。public class TestThis {int a; int b; int c; public TestThis(){}public TestThis(int A,int B){ a=A;b=B; }public TestThis(int A,int B,int C){ this(A,B); c=C; } },子类对象的实例化过程,例如:MapPoint mp=new MapPoint(); 分配成员变量的存储空间并进行默认初始化 绑定构造函数。 调用父类的构造函数:如有super(…) 则调用,如果没有显式调用父类的构造函数,则自动调用父类无参构造函数。 继续执行本类的构造函数:,子类对象的实例化过程,class A{public A() { System.out.println(“自动调用“); }public A(int tt) { System.out.println(“super调用“); } }class B extends A{public B(){ //super(10);System.out.println(“B类构造函数“);}public static void main(String[] args){A ab=new B();} },实例,import java.awt.*; import java.awt.event.*; import javax.swing.*;class myFrame extends JFrame { private JTextField tf;private JButton b0;myFrame(){setSize(220,180); tf=new JTextField(20); b0 = new JButton(“0“);Container cp = getContentPane();cp.add(tf,BorderLayout.NORTH);cp.add(b0,BorderLayout.CENTER);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setVisible(true); }public static void main(String[] args) { myFrame mf=new myFrame(); } },4.3 抽象类,抽象类就是那些类中存在一些没有完全实现的方法的类。不能给抽象类创建对象,但是可以使用抽象类作为基类派生出其他类。 抽象类中那些没有实现的方法称为抽象方法,用abstract修饰,没有方法体:abstract funName(参数列表);例如:public abstract boolean dial();,abstract class Area {public abstract double area();}class RectArea extends Area{double length,width; public double area(){return length*width;} }class RoundArea extends Area{double r; public double area(){return Math.PI*r*r;} }public class ImpleArea{public static void main(String args[]){RectArea rect=new RectArea();RoundArea round=new RoundArea(); System.out.println(rect.area());System.out.println(round.area());} },抽象类(abstract class),抽象类不能被实例化 子类继承抽象类时,必须重写抽象方法,否则仍为抽象类,为什么有抽象类?,在面向对象程序设计中,越是处在继承结构的顶层的类,就越概括、越抽象。我们常常需要定义一些表示抽象概念的类,这些类为子类提供一个实现框架,本身却不能提供具体的实例。 抽象类只能被继承,只有其子类覆盖并实现了那些抽象方法后,才能创建对象并使用。,接口(interface)是对抽象类的进一步扩展,是区别于类的另外一种复合数据类型 接口由成员变量和成员函数构成 接口中的成员函数都是抽象方法,即由public abstract修饰。 接口中的成员变量都是常量,即由“public static final”修饰。,4.4 接口 (interface),定义interface InfA{int a=3; boolean con=true;void funcA(int x); } interface InfB{double b=3.5; public abstract void funcB(double y); },接口(interface)的定义,[public] interface 接口名 {成员变量;方法声明;},接 口支持多继承,interface InfC extends InfA,InfB {int c=10;void funcC(); },接口之间也有继承方式, 接口支持多继承。 接口之间的继承使用extends关键字。,接 口的使用,用于类的定义 可以通过实现一个或多个接口来定义类。 实现接口使用implements关键字。,public class ImpleC implements InfC{public void funcC() { System.out.println(c); }public void funcA(int x){ System.out.println(“x=“+x); }public void funcB(double y){ System.out.println(“y=“+y); }public static void main(String args[]){ImpleC cc=new ImpleC();cc.funcC(); cc.funcA(c); cc.funcB(b); }},interface InterfaceA{public static final int a=3; boolean con=true;public abstract void funcA(int x); } interface InterfaceB{double b=3.5; public abstract void funcB(double y); } interface InterfaceC extends InterfaceA,InterfaceB{int c=10;void funcC(); }public class ImplementsC implements InterfaceC{public void funcC(){ System.out.println(c); }public void funcA(int x){ System.out.println(“x=“+x); }public void funcB(double y){ System.out.println(“y=“+y); }public static void main(String args[]){ImplementsC cc=new ImplementsC();cc.funcC(); cc.funcA(c); cc.funcB(b); }},接口 (interface),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++) {f[i].parameter();f[i].area(); },interface Figure {double half=0.5,pi=3.14159;void parameter();void area(); },完整的类的定义的语法如下:,[修饰符] class className [extends superClass][implements interface1,interface2…] {…… }//一个类只能继承于一个父类,但是可以实现多个接口,实例,myFrameEvent.java,import java.awt.*;import java.awt.event.*;import javax.swing.*; class MyFrameEvent extends JFrame implements ActionListener{ private JTextField tf; private JButton b0; private String s=““; MyFrameEvent(){tf=new JTextField(20); b0 = new JButton(“0“); setSize(220,180); Container cp =getContentPane();cp.add(tf,BorderLayout.NORTH); cp.add(b0,BorderLayout.CENTER);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);b0.addActionListener(this); setVisible(true); } public void actionPerformed(ActionEvent e){JButton tempB = (JButton)e.getSource();s = tempB.getLabel(); tf.setText(tf.getText()+s);} public static void main(String[] args) { MyFrameEvent et=new MyFrameEvent(); }},
展开阅读全文
  微传网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
0条评论

还可以输入200字符

暂无评论,赶快抢占沙发吧。

关于本文
本文标题:第4章 深入学习Java面相对象程序设计.ppt
链接地址:https://www.weizhuannet.com/p-10036073.html
微传网是一个办公文档、学习资料下载的在线文档分享平台!

网站资源均来自网络,如有侵权,请联系客服删除!

 网站客服QQ:80879498  会员QQ群:727456886

copyright@ 2018-2028 微传网络工作室版权所有

     经营许可证编号:冀ICP备18006529号-1 ,公安局备案号:13028102000124

收起
展开