第七周课程总结 & 实验报告(五)
第七周课程总结
一、抽象类与接口的应用
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 系统包的结构。
- 掌握创建自定义包的方法。
- 实验内容
(一)抽象类的使用
- 设计一个类层次,定义一个抽象类--形状,其中包括有求形状的面积的抽象方法。 继承该抽象类定义三角型、矩形、圆。 分别创建一个三角形、矩形、圆存对象,将各类图形的面积输出。
注:三角形面积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) 接口中定义的方法在实现接口的具体类中要重写实现;
(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.实验结果
第七周课程总结 & 实验报告(五)的更多相关文章
- 第七周课程总结&实验报告五
实验四 类的继承 实验目的 理解抽象类与接口的使用: 了解包的作用,掌握包的设计方法. 实验要求 掌握使用抽象类的方法. 掌握使用系统接口的技术和创建自定义接口的方法. 了解 Java 系统包的结构. ...
- 第七周课程总结&实验报告(五)
实验四 类的继承 实验目的 理解抽象类与接口的使用: 了解包的作用,掌握包的设计方法. 实验要求 掌握使用抽象类的方法. 掌握使用系统接口的技术和创建自定义接口的方法. 了解 Java 系统包的结构. ...
- 第七周课程总结&实验报告
课程总结 主要学习了抽象类与接口的应用 1.抽象类的成员可以具有访问级别 接口的成员全部public级别 2.抽象类可以包含字段 接口不可以 3.抽象类可以继承接口 接口不能继承抽象类 4.抽象类的成 ...
- 第七周编程总结&&实验报告五
实验四 类的继承 实验目的 理解抽象类与接口的使用: 了解包的作用,掌握包的设计方法 实验要求 掌握使用抽象类的方法. 掌握使用系统接口的技术和创建自定义接口的方法. 了解 Java 系统包的结构. ...
- 第七周课程总结&实验报考(五)
第七周课程总结&实验报考(五) 实验四 类的继承 实验目的: 1.理解抽象类与接口的使用: 2.了解包的作用,掌握包的设计方法. 实验要求: 1.掌握使用抽象类的方法. 2.掌握使用系统接口的 ...
- 第九周课程总结 & 实验报告(七)
第九周课程总结 一.多线程 1.线程的状态 2.线程操作的相关方法 二.Java IO 1.操作文件的类---File ()基本介绍 ()使用File类操作文件 .RandomAccessFile类 ...
- 第五周课程总结&实验报告(四)
第五周课程总结 本周主要学习了 1.抽象类 抽象类的定义格式 abstract class抽象类名称{ 属性; 访问权限返回值类型方法名称(参数){ //普通方法 [return返回值]; } 访问权 ...
- 第五周课程总结&实验报告(三)
实验三 String类的应用 实验目的: (1)掌握类String类的使用: (2)学会使用JDK帮助文档: 实验内容: 1.已知字符串:"this is a test of java&qu ...
- 第三周课程总结&实验报告
课程总结 在这周对Java进行了更深层次的学习,Java的学习也变得越来越困难而有趣,加入了一些新的构造新的方法,还学习了一些简化代码的方式. 面向对象的基本概念 对于面向对象的程序设计有三个主要特征 ...
随机推荐
- @Resource与@Autowired注解的区别踩坑者入
一.写本博文的原因 有些童鞋搞不为什么要用@Resource或者@Autowired,咱们一起研究下 @Resource默认按照名称方式进行bean匹配,@Autowired默认按照类型方式进行bea ...
- leetcode 对角线遍历 JavaScript
JavaScript /** * @param {number[][]} matrix * @return {number[]} */ var findDiagonalOrder = function ...
- Eclipse中插件的运用
1. hotcode2.jar 支持java代码热部署,改了本地java代码不需要重新部署生效,可以节省开发时间,提高开发效率. 安装方法: 到help -- install new software ...
- 利用python3 爬虫 定制版妹子图mzitu爬取
在刚开始学爬虫的时候,用来练手的基础爬虫就是爬取各种妹子图片,前几天同时说了这个,便准备随便写一个...最后发现真是三天不练..什么都记不住了!!所以花了政治一天重新写了一个爬虫程序,并且支持按照时间 ...
- Nginx的软件架构
nginx原理架构图 Nginx是 master/worker 模型 一个master进程,可生成一个或多个worker进程,每个worker进程基于事件驱动机制响应客户端请求: 事件驱动机制:epo ...
- osworkflow 入门基础
OSWorkFlow入门指南目的 这篇指导资料的目的是介绍OSWorkflow的所有概念,指导你如何使用它,并且保证你逐步理解OSWorkflow的关键内容. 本指导资料假定你已经部署OSWorkfl ...
- 架构师成长之路5.4-Saltstack配置管理(LAMP架构案例)
点击架构师成长之路 架构师成长之路5.4-Saltstack配置管理(LAMP架构案例) 配置管理工具: Pupper:1. 采用ruby编程语言:2. 安装环境相对较复杂:3.不支持远程执行,需要F ...
- TDD明白了,ATDD测试到底是什么?
随着敏捷开发的蓬勃发展.遍地开花,TDD(Test Drive Development测试驱动开发)的概念已经深入软件研发从业者的心中. TDD讲究的是:“测试在先.编码在后”.有别于以往的“先编码. ...
- Spring Boot热部署插件
在实际开发中,我们修改某些代码逻辑功能或页面都需要重启应用,这无形中降低了开发效率,热部署是指当我们修改代码后,服务能自动重启加载新修改的内容,而不需要重启应用,这样大大提高了我们开发的效率. Spr ...
- 17JQuery高级
1. 动画 1. 三种方式显示和隐藏元素 1. 默认显示和隐藏方式 1. show([speed,[easing],[fn]]) 1. 参数: 1. speed:动画的速度.三个预定义的值(" ...