第六章 面向对象(下)
来源:互联网 发布:淘宝女装店铺改卖男装 编辑:程序博客网 时间:2024/06/05 23:53
6.1this的用法有3种;
- this.域变量、this.成员方法:在一些容易混淆的场合,在方法内借助this来明确表示用的是类的域变量;
- this(参数)——引用重载的构造方法
- this指代当前对象
super的用法有2种;
- super.域变量、super.成员方法(参数)
- super(参数)
6.2子类对象实例化的过程;
- 为子类对象分配内存空间,对域变量进行默认初始化
- 绑定构造方法
- 调用this或super语句,注意二者必居其一,但不能同时存在
- 进行实例变量的显式初始化操作
- 执行当前构造方法体中的程序代码
6.3 如果传入参数的名称和域变量的名称相同,则必须用this来指明域变量,否则将造成语意不清而出现问题;
6.4 产生抽象类并采用继承方式定义子类,可以简化子类定义,增加系统结构关系的清晰度,以代码为例:
abstract class Shapes { protected int x,y,k; protected double m; public Shapes(int x,int y,int k,double m) {this.x=x; this.y=y; this.k=k; this.m=m; } abstract public double getArea(); abstract public double getPerimeter();}package 第六章;import java.awt.*;import java.applet.*;class Rect extends Shapes { public double getArea() { return(k*m); } public double getPerimeter() { return(2*k+2*m);} public Rect(int x,int y,int width,int height) { super(x,y,width,height);}}class Triangle extends Shapes{ public double getArea() {return(Math.sqrt(m*( m-k)*( m-x)*(m-y)));} public double getPerimeter(){return(k+x+y);} public Triangle(int baseA,int baseB,int baseC){ super(baseA, baseB, baseC,0); //m充当了周长的一半 m= (baseA+ baseB+ baseC)/2.0;} }class Circle extends Shapes{ public double getArea() //Math是java.lang包中的类,PI是静态其属性,其值为Π{return(m* m *Math.PI);} public double getPerimeter(){return(2*Math.PI* m);} public Circle(int x,int y,int width){ //m充当了半径的角色,k充当了直径super(x,y, width, width/2.0);}}public class RunShape extends Applet{ Rect rect=new Rect(5,15,25,25); Triangle tri=new Triangle(5,5,8); Circle cir =new Circle(13,90,25); public void paint(Graphics g) { //绘制矩形,输出矩形的面积和周长g.drawRect(rect.x,rect.y,rect.k,(int)rect.m);g.drawString("Rect Area:"+rect.getArea(),50,35);g.drawString("Rect Perimeter:"+rect.getPerimeter(),50,55);//输出三角形的面积和周长g.drawString("Triangle Area:"+tri.getArea(),50,75);g.drawString("Triangle Perimeter:"+tri.getPerimeter(),50,95);//绘制圆,输出圆的面积和周长 g.drawOval(cir.x-(int)cir.k/2,cir.y-(int)cir.k/2,cir.k,cir.k); g.drawString("Circle Area:"+cir.getArea(),50,115);g.drawString("Circle Perimeter:"+cir. getPerimeter(),50,135); }}
结果:
package 第六章;abstract class Shapes{ protected int x,y,k; protected double m; public Shapes(int x,int y,int k,double m) {this.x=x; this.y=y; this.k=k; this.m=m; } abstract public double getArea(); abstract public double getPerimeter();}package 第六章;import java.awt.*;import java.applet.*;class Rect extends Shapes { public double getArea() { return(k*m); } public double getPerimeter() { return(2*k+2*m);} public Rect(int x,int y,int width,int height) { super(x,y,width,height);}}class Triangle extends Shapes{ public double getArea() {return(Math.sqrt(m*( m-k)*( m-x)*(m-y)));} public double getPerimeter(){return(k+x+y);} public Triangle(int baseA,int baseB,int baseC){ super(baseA, baseB, baseC,0); //m充当了周长的一半 m= (baseA+ baseB+ baseC)/2.0;} }class Circle extends Shapes{ public double getArea() //Math是java.lang包中的类,PI是静态其属性,其值为Π{return(m* m *Math.PI);} public double getPerimeter(){return(2*Math.PI* m);} public Circle(int x,int y,int width){ //m充当了半径的角色,k充当了直径super(x,y, width, width/2.0);}}public class RunShape1 extends Applet{Rect rect=new Rect(5,15,25,25);Triangle tri=new Triangle(5,5,8);Circle cir=new Circle(13,90,25); //增加两个方法,注意抽象类的声明为s,ab为字符串输出的坐标。//getClass.getName是得到对象对应的类名。private void drawArea(Graphics g,Shapes s,int a,int b){g.drawString(s.getClass().getName()+" Area"+s.getArea(),a,b);}private void drawPerimeter (Graphics g,Shapes s,int a,int b){g.drawString(s.getClass().getName()+" Perimeter"+s.getPerimeter(),a,b);}public void paint(Graphics g){ g.drawRect(rect.x,rect.y,rect.k,(int)rect.m); //1 drawArea (g,rect,50,35); //2 drawPerimeter(g,rect,50,55); //3 drawArea (g, tri,50,75); //4 drawPerimeter(g,tri,50,95); //5 g.drawOval(cir.x-(int)cir.k/2,cir.y-(int)cir.k/2,cir.k,cir.k); //6 drawArea (g, cir,50,115); //7 drawPerimeter(g,cir,50,135); //8 }}
结果:
6.5 接口相当于一种标准,类似于产品功能说明书;
package 第六章;interface Washer { abstract void startUp(); //启动 abstract void letWaterIn(); //进水 abstract void washClothes(); //洗衣 abstract void letWaterOut();//排水 abstract void stop(); //停止}class RoseBrand implements Washer{ public void startUp(){ System.out.println("startUp");} public void letWaterIn(){System.out.println("letWaterIn");} public void washClothes(){System.out.println("washClothes");} public void letWaterOut(){System.out.println("letWaterOut");} public void stop(){System.out.println("stop");} //脱水 public void dehydrate(){System.out.println("dehydrate ");}}public class Consumer { public static void main(String args[]){ //接口声明引用实现接口的RoseBrand类的对象。Washer w = new RoseBrand();w.startUp();w.letWaterIn();w.washClothes();w.letWaterOut();w.stop();//w.dehydrate ();当通过接口调用玫瑰洗衣机类独有的,//接口未定义的功能方法,编译会报错。 } }
6.6 抽象类和接口比较;
共同点:二者都有抽象方法,都不能实例化。都有自己的声明,并能引用具体子类或实现类对象
不同点:
属性:抽象类可以有域变量,而接口不能有域变量,只能是静态变量;
成员方法:抽象类可以有具体方法,而且具体方法可以调用抽象方法,接口如果有方法则全部是抽象方法;
实现策略:抽象类必须有子类继承,接口必须有实现类实现;
扩展性:抽象类弱,接口强;
6.7 引用比较方法;
equals方法;
==;
instanceof方法;
6.8
内部类可以直接访问外部类中的所有属性;
匿名内部类的使用条件:
- ’只用到类的一个实例;
- 类在定义后马上用到;
- 类非常小;
阅读全文
0 0
- 第六章 面向对象(下)
- 疯狂JAVA讲义---第六章(下):面向对象二
- FKJAVA读书笔记--第六章--面向对象(下)
- 第六章面向对象(下)2015-05-13
- java SE 第六章 面向对象(下)
- 第六章 面向对象
- 第六章:面向对象
- 第六章:面向对象(二)
- 第六章 面向对象面向对象程序设计
- Java基础学习第六章之面向对象下
- 第六篇:JAVA之面向对象(下)
- 第六章 面向对象基础
- 面向对象第六章 异常
- 第六章-面向对象编程
- 疯狂JAVA讲义---第六章(上):面向对象二
- 疯狂JAVA讲义---第六章(中):面向对象二
- javascript高级程序设计(第六章面向对象的程序设计)
- 第六章 C++面向对象程序设计
- HDU 4009-Transfer water
- Java数据库面试题
- shell进程管理
- 谷歌验证码的使用
- TeX中的引号
- 第六章 面向对象(下)
- shell归档与备份
- Distances to Zero(lower_bound和upper_bound应用)
- ARM64 memblock init过程
- Tensorflow 初步
- 主机资产采集开源工具osqeury使用后的心得
- zepto core
- shell中的重定向
- leetcode 19. Remove Nth Node From End of List