第七周课程总结

一、抽象类与接口的应用
1.实例化
2.实际应用 ---模板设计(抽象类)
---制定标准(接口)
3.设计模式 ---工厂设计
---代理设计
---适配器设计
二、抽象类与接口之间的关系
三、object类
1.基本作用
2.主要方法
(1)toString()
(2)equals()

一、抽象类与接口的应用

     1.在Java中通过对象的多态性为抽象类和接口实例化,通过子类为接口实现实例化

       子类继承抽象类使用extends关键字

       子类实现接口使用implements关键字

       2.抽象类相当于定义了一个模板,在主方法中调用的就是普通方法,所以需要子类实现父类中的抽象方法。

       接口在实际中是用来指定标准的,对计算机来说,只要是符合标准,就能接受,具体并不关心。

二、抽象类与接口之间的关系

区别点

抽象类

接口

定义

包含一个抽象方法的类

抽象方法和全局变量的集合

组成

构造方法、抽象方法、普通方法、常量、变量

常量、抽象方法

使用

子类继承抽象类(extends)

子类实现接口(implements)

关系

抽象类可以实现多个接口

接口不能继承抽象类,但允许继承多个接口

常见设计模式

模板设计

工厂设计,代理设计

局限

抽象类有单继承的局限

接口没有单继承的局限

实际

作为一个模板

是作为一个标准或不是一种能力

对象

都通过对象的多态性产生实例化对象

都通过对象的多态性产生实例化对象

选择

如果抽象类和接口都可使用的话,优先使用接口,因为避免单继承的局限

如果抽象类和接口都可使用的话,优先使用接口,因为避免单继承的局限

特殊

一个抽象类中可以包含多个接口,一个接口中可以包含多个抽象类

一个抽象类中可以包含多个接口,一个接口中可以包含多个抽象类

原则:一个类不要去继承一个已经实现好的类,要么继承抽象类,要么实现接口,如果接口和抽象类都可以使用的话,那么优先使用接口,避免单继承局限

三、object类

1.object类就是一个公共类,一个类只要没有明显的继承一个类,那肯定是object类的子类。

2.  equals()方法主要的功能就是用于对象的比较,实际上String也是object类的子类,所以在String中已经实现好了此方法,如果现在需要实现对象的比较操作,则直接在类                        中覆写此方法即可。

在一个类中覆写toString()方法,便可以在输出对象时直接调用被子类覆写过的toString()方法。

实验报告(五)

  • 实验目的
  • 理解抽象类与接口的使用;
  • 了解包的作用,掌握包的设计方法。
  • 实验要求
  • 掌握使用抽象类的方法。
  • 掌握使用系统接口的技术和创建自定义接口的方法。
  • 了解 Java 系统包的结构。
  • 掌握创建自定义包的方法。
  • 实验内容

(一)抽象类的使用

  1. 设计一个类层次,定义一个抽象类--形状,其中包括有求形状的面积的抽象方法。 继承该抽象类定义三角型、矩形、圆。 分别创建一个三角形、矩形、圆存对象,将各类图形的面积输出。
    注:三角形面积s=sqrt(p*(p-a)*(p-b)*(p-c)) 其中,a,b,c为三条边,p=(a+b+c)/2

2.编程技巧

(1)    抽象类定义的方法在具体类要实现;

(2)    使用抽象类的引用变量可引用子类的对象;

(3) 通过父类引用子类对象,通过该引用访问对象方法时实际用的是子类的方法。可将所有对象存入到父类定义的数组中。

(二)使用接口技术

1定义接口Shape,其中包括一个方法size(),设计“直线”、“圆”、类实现Shape接口。分别创建一个“直线”、“圆”对象,将各类图形的大小输出。

  1. 编程技巧

(1) 接口中定义的方法在实现接口的具体类中要重写实现;

(2) 利用接口类型的变量可引用实现该接口的类创建的对象。

(一)抽象类的使用

1.实验源码

抽象类
package shapeArea; abstract class shapeArea { private double a,b,c;
public shapeArea(double a,double b,double c) {
this.a = a;
this.b = b;
this.c = c;
}
public shapeArea(double a,double b) {
this.a = a;
this.b = b;
}
public shapeArea(double a) {
this.a = a;
}
public abstract void print(); public double getA() {
return a;
}
public double getB() {
return b;
}
public double getC() {
return c;
} public void setA(double a) {
this.a = a;
}
public void setB(double b) {
this.b = b;
}
public void setC(double c) {
this.c = c;
}
}
三角形类
package shapeArea; class Triangle extends shapeArea { public Triangle(double a,double b,double c) {
super(a,b,c);
}
public double Area() {
double p=(getA()+getB()+getC())/2;
double s=Math.sqrt(p*(p-getA())*(p-getB())*(p-getC()));
return s; } public void print(){
System.out.println("三角形面积:"+this.Area()); } }
矩形类
package shapeArea; public class Rectangle extends shapeArea { public Rectangle(double a,double b) {
super(a,b);
}
public double Area() {
double z = getA()*getB();
return z;
} public void print(){
System.out.println("矩形面积:"+this.Area()); } }
圆类
package shapeArea; class Circle extends shapeArea{
public Circle(double a) {
super(a);
}
public double Area() { double x=3.14*getA()*getA();
return x; } public void print(){
System.out.println("圆的面积:"+this.Area()); } }
测试
package shapeArea; import java.util.*;
public class Test { public static void main(String[] args) {
System.out.println("请输入三角形三边长:");
Scanner out = new Scanner(System.in);
int a = out.nextInt();
int b = out.nextInt();
int c = out.nextInt();
System.out.println("请输入圆的半径:");
int d = out.nextInt();
System.out.println("请输入矩形的宽和高:");
int e = out.nextInt();
int f = out.nextInt();
Triangle tr = new Triangle(a,b,c);
tr.print();
Circle cir = new Circle(d);
cir.print();
Rectangle rec = new Rectangle(e,f);
rec.print();
} }

2.实验结果

(二)使用接口技术

1.实验源码

接口
package shape接口; interface Shape { public void size(); }
package shape接口;

class Shape1 {
public static Shape getshape(String className,double a) {
Shape s = null;
if("circle".equals(className)) {
s = new Circle(a);
}
if("line".equals(className)) {
s = new Line(a);
} return s;
} }
直线类
package shape接口; class Line implements Shape { private double a; public Line(double a) {
this.a = a;
} public double getA() {
return a;
} public void setA(double a) {
this.a = a;
} public void size() {
System.out.println("直线的长度:"+a); } }
圆类
package shape接口; class Circle implements Shape { private double a;
public Circle(double a) {
this.a = a;
} public double getA() {
return a;
} public void setA(double a) {
this.a = a;
} public void size() {
System.out.println("圆的半径:"+a+" 圆的面积:"+(3.14*a*a));
}
}
测试
package shape接口;
import java.util.Scanner;
public class Test { public static void main(String[] args) {
while(true) {
System.out.print("\n"+"请输入图形:");
Scanner out =new Scanner(System.in);
String str = out.nextLine();
System.out.print("请输入数据:");
int p = out.nextInt(); Shape s = null;
s = Shape1.getshape(str,p);
s.size();
}
} }

2.实验结果

第七周课程总结 & 实验报告(五)的更多相关文章

  1. 第七周课程总结&实验报告五

    实验四 类的继承 实验目的 理解抽象类与接口的使用: 了解包的作用,掌握包的设计方法. 实验要求 掌握使用抽象类的方法. 掌握使用系统接口的技术和创建自定义接口的方法. 了解 Java 系统包的结构. ...

  2. 第七周课程总结&实验报告(五)

    实验四 类的继承 实验目的 理解抽象类与接口的使用: 了解包的作用,掌握包的设计方法. 实验要求 掌握使用抽象类的方法. 掌握使用系统接口的技术和创建自定义接口的方法. 了解 Java 系统包的结构. ...

  3. 第七周课程总结&实验报告

    课程总结 主要学习了抽象类与接口的应用 1.抽象类的成员可以具有访问级别 接口的成员全部public级别 2.抽象类可以包含字段 接口不可以 3.抽象类可以继承接口 接口不能继承抽象类 4.抽象类的成 ...

  4. 第七周编程总结&&实验报告五

    实验四 类的继承 实验目的 理解抽象类与接口的使用: 了解包的作用,掌握包的设计方法 实验要求 掌握使用抽象类的方法. 掌握使用系统接口的技术和创建自定义接口的方法. 了解 Java 系统包的结构. ...

  5. 第七周课程总结&实验报考(五)

    第七周课程总结&实验报考(五) 实验四 类的继承 实验目的: 1.理解抽象类与接口的使用: 2.了解包的作用,掌握包的设计方法. 实验要求: 1.掌握使用抽象类的方法. 2.掌握使用系统接口的 ...

  6. 第九周课程总结 & 实验报告(七)

    第九周课程总结 一.多线程 1.线程的状态 2.线程操作的相关方法 二.Java IO 1.操作文件的类---File ()基本介绍 ()使用File类操作文件 .RandomAccessFile类 ...

  7. 第五周课程总结&实验报告(四)

    第五周课程总结 本周主要学习了 1.抽象类 抽象类的定义格式 abstract class抽象类名称{ 属性; 访问权限返回值类型方法名称(参数){ //普通方法 [return返回值]; } 访问权 ...

  8. 第五周课程总结&实验报告(三)

    实验三 String类的应用 实验目的: (1)掌握类String类的使用: (2)学会使用JDK帮助文档: 实验内容: 1.已知字符串:"this is a test of java&qu ...

  9. 第三周课程总结&实验报告

    课程总结 在这周对Java进行了更深层次的学习,Java的学习也变得越来越困难而有趣,加入了一些新的构造新的方法,还学习了一些简化代码的方式. 面向对象的基本概念 对于面向对象的程序设计有三个主要特征 ...

随机推荐

  1. sql--Drop语句

    通过使用 DROP 语句,可以轻松地删除索引.表和数据库. SQL DROP INDEX 语句 我们可以使用 DROP INDEX 命令删除表格中的索引. 用于 Microsoft SQLJet (以 ...

  2. AngularJS 在实际应用中优缺点

    AngularJS 在实际应用中优点:模板功能强大丰富,并且是声明式的,自带了丰富的Angular指令:是一个比较完善的前端MV*框架,包含模板,数据双向绑定,路由,模块化,服务,过滤器,依赖注入等所 ...

  3. 关于select的取值

    这篇博客,主要是记录我我所犯的错误,或者自己的写法不规范导致了错误,大家可以引以引以为鉴. 我要获取select当前的值,在IE9上我可以直接写document.getElementById(&quo ...

  4. deep_learning_Function_bath_normalization()

    关于归一化的讲解的博客——[深度学习]Batch Normalization(批归一化) tensorflow实现代码在这个博客——[超分辨率]TensorFlow中批归一化的实现——tf.layer ...

  5. 14Filter&Listener

    1.Filter:过滤器 1.1 概念 生活中的过滤器:净水器,空气净化器,土匪. web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能. 过滤器的作用: 一般用于完成 ...

  6. 记录一下RAC的使用

    1  常规的对数组的操作,包括遍历.刷选.映射.替换 // 遍历 NSArray * array = @["]; [array.rac_sequence.signal subscribeNe ...

  7. electron仿制qq(2) 主界面制作

    制作从头开始 最后会将写好的组件放到一起的!之前写了好几天的纯css 有点累 本章中将使用sass 如果代码太长 会分两个或多个章节写代码中会有详细的注释 以便于大家阅读and理解界面可能会有部分偏差 ...

  8. vue使用echart中国地图

    /* 引入 ECharts (按需加载) 文档:http://echarts.baidu.com/tutorial.html#%E5%9C%A8%20webpack%20%E4%B8%AD%E4%BD ...

  9. 2019年11月18日 JAVA期中考试 增删改查

    一.题目 石家庄铁道大学 青年志愿者服务网(20分)   1.项目需求: 为了适应社会主义市场经济发展的需要,推动青年志愿服务体系和多层次社会保障体系的建立和完善,促进青年健康成长,石家庄铁道大学急需 ...

  10. Vue.use() 方法

    1.本人在学习Vue时,会用到 Vue.use() .例如:Vue.use(VueRouter).Vue.use(MintUI).但是用 axios时,就不需要用 Vue.use(axios),就能直 ...