java学习-抽象类和接口-抽象类初体验
今天在老师的带领下学习了抽象类(abstract)和接口(interface),总结一下今天所学的知识。
抽象类是在学习到接口时之前讲解,作为学习接口的铺垫。
下面是我今天写的例题。
一个Shape(形状)类抽象类为父类。
两个子类,Triangle(三角形) Circle(圆)类;
一个坐标类Point,用来帮助求面积和周长。
父类形状类--》 Shape:
public abstract class Shape {
public String name;
public String getName() {
return name;
}
/**
* 抽象类,求周长
* @return 周长的值
*/
public abstract double perimeter();
/**
* 抽象类,求面积
* @return 面积
*/
public abstract double area();
}
Point类(辅助类,帮助求三角形和圆的面积周长)
public class Point {
private double x; //成员变量
private double y;
/**
* 初始化方法
* @param x 横坐标
* @param y 纵坐标
*/
public void init(double x,double y){
this.x = x;
this.y = y;
}
/**
*
* @param p 计算距离的两个点之一(还有一个是this,即自己)
* @return 距离
*/
public double distance(Point p){
return Math.sqrt(Math.pow((p.x-this.x),2)+Math.pow((p.y-this.y),2)); // 当前对象 p1.distance(p2)) this 表示的是 p1
}
}
三角形类(Triangle)
public class Triangle extends Shape {
private Point ponitA ;// 坐标A
private Point ponitB ;// 坐标B
private Point ponitC ;// 坐标C
@Override
public String getName() {
return "三角形";
}
public Triangle(double x1,double y1,double x2,double y2,double x3,double y3){
ponitA = new Point();
ponitA.init(x1,y1);
ponitB = new Point();
ponitB.init(x2,y2);
ponitC = new Point();
ponitC.init(x3,y3);
}
/**
* 初始化三角形
* @param ponitA 第一个点
* @param ponitB 第二个点
* @param ponitC 第三个点
*/
public Triangle(Point ponitA,Point ponitB,Point ponitC){
this.ponitA = ponitA;
this.ponitB = ponitB;
this.ponitC = ponitC;
}
/**
* 计算周长
* @return 周长
*/
public double perimeter(){
double a = ponitA.distance(ponitB); //a到b的距离
double b = ponitB.distance(ponitC); //b到c的距离
double c = ponitC.distance(ponitA); //c到a的距离
return a+b+c;
}
/**
* 计算面积
* @return 面积
*/
public double area(){
new Point();
double a = ponitA.distance(ponitB); //a到b的距离
double b = ponitB.distance(ponitC); //b到c的距离
double c = ponitC.distance(ponitA); //c到a的距离
double s = (a+b+c)/2;
return Math.sqrt(s*(s-a)*(s-b)*(s-c));
}
}
圆类 Circle
public class Circle extends Shape{
private double r;
private Point p;// 圆心
@Override
public String getName() {
return "圆";
}
/**
* 初始化
* @param r 初始化半径
* @param x 初始化x
* @param y 初始化y
*/
public Circle(double r, double x,double y){
this.r = r;
Point p = new Point();
p.init(x,y);
this.p = p;
}
/**
* 第二种初始化方法
* @param p 定义一个坐标
* @param r 初始化半径
*/
public Circle(Point p,double r){
new Point();
this.p = p;
this.r = r;
}
/**
* 求面积
* @return 返回面积
*/
public double area( ){
return Math.PI*r*r;
}
/**
* 求周长
* @return 返回周长
*/
public double perimeter( ){
return Math.PI*r*2;
}
}
测试类 Test
public class Test {
public static void main(String[] args) {
Shape shape ;
Circle circle = new Circle(1,0,0);
Triangle triangle = new Triangle(0,0,0,3,4,0);
print(circle);
shape = triangle;//赋值兼容性规则,凡是需要用到父类对象的时候,都可以用子类代替它。
print(shape);
}
public static void print(Shape shape){
System.out.println(shape.getName()+"的周长是:"+shape.perimeter());
System.out.println(shape.getName()+"的面积是:"+shape.area());
}
}
测试结果:
学习总结
.抽象类-- 抽象类不可以用于对象创建, 比如说 Shape shape = new Shape();是错误的,只能 ---》Shape shape;
Shape shape = new Shape() 的时候会弹出来如下图所示,这个叫做匿名内部类。

这个匿名类简化了代码,把偶尔用到的类进行内部匿名。它实现了把接口,定义对象合二为一,是目前的主流写法。
要注意的是:匿名类在 代码段合起来以后 就像是一个语句,后面要加分号,这里容易出错。

匿名类应用最多的地方是键盘事件,下图是做贪吃蛇时用到的匿名类

java学习-抽象类和接口-抽象类初体验的更多相关文章
- Java学习笔记 07 接口、继承与多态
一.类的继承 继承的好处 >>使整个程序架构具有一定的弹性,在程序中复用一些已经定义完善的类不仅可以减少软件开发周期,也可以提高软件的可维护性和可扩展性 继承的基本思想 >>基 ...
- 深度学习之TensorFlow安装与初体验
深度学习之TensorFlow安装与初体验 学习前 搞懂一些关系和概念 首先,搞清楚一个关系:深度学习的前身是人工神经网络,深度学习只是人工智能的一种,深层次的神经网络结构就是深度学习的模型,浅层次的 ...
- (数据科学学习手札35)tensorflow初体验
一.简介 TensorFlow时谷歌于2015年11月宣布在Github上开源的第二代分布式机器学习系统,目前仍处于快速开发迭代中,有大量的新功能新特性在陆续研发中: TensorFlow既是一个实现 ...
- Java 学习笔记(7)——接口与多态
上一篇说了Java面向对象中的继承关系,在继承中说到:调用对象中的成员变量时,根据引用类型来决定调用谁,而调用成员方法时由于多态的存在,具体调用谁的方法需要根据new出来的对象决定,这篇主要描述的是J ...
- Java学习5之接口
接口不是类,而是一个特殊的名称,使用interface关键字.子类可以实现多个接口. 接口实现: public class Child extends Parent implements Interf ...
- java学习——JDK1.8接口和实现类
Java 8 新特性:接口的静态方法和默认方法 https://blog.csdn.net/sun_promise/article/details/51220518 接口的默认方法和静态方法 http ...
- 1)Java学习笔记:接口和抽象类的异同
Java接口和抽象类很像,他们有哪些相同点和异同点呢,下面我们做一个小结 相同 ① 都不能被实例化,都位于继承树的顶端,用于被实现或者继承 ② 都可以包含抽象方法,实现接口或者继承抽象类的普通子类都必 ...
- Java学习笔记之接口和抽象类
接口(interface)1.interface创建一个接口,implements实现接口 interface jiekou{} class lie implements jiekou{}2.接口可以 ...
- 《JAVA学习笔记(14-10---14-11抽象类)》
[14-10]面向对象-抽象类的产生 /* 描述狗,行为,吼叫. 描述狼,行为,吼叫. 发现他们之间有共性,可以进行向上抽取. 当然是抽取他们的所属共性类型,犬科. 犬科这类事物,都具备吼叫行为,但是 ...
随机推荐
- redis基本操作,基于StringRedisTemplate,存储,取值,设置超时时间,获取超时时间,插入list操作
@Autowired private StringRedisTemplate stringRedisTemplate; @GetMapping("/test") void test ...
- WLC-Download 3-party CA to WLC
一.基础准备 为了创建和导入第三方SSL-certificate你需要做如下准备:1.一个WLC(随着版本的不同,可能需要准备的也不同)这里以7.0.98版本为例.2.一个外部的证书颁发机构(Cert ...
- Yar并行的RPC框架的简单使用
前言: RPC,就是Remote Procedure Call的简称呀,翻译成中文就是远程过程调用 RPC要解决的两个问题: 解决分布式系统中,服务之间的调用问题. 远程调用时,要能够像本地调用一样方 ...
- 【读书笔记】图解HTTP完整流程
1.1 使用 HTTP 协议访问 Web: 根据 Web 浏览器地址栏中指定的URL,从服务端获取资源等信息,在页面上展示. Web 使用一种 HTTP (超文本传输协议)作为规范,完成从客户端到服务 ...
- 001. 使用IDEA新建一个JAVA最简单的Spring MVC JAVAWEB程序
1. 我们打开一个空的IDEA 2. 选择Java之后点击Next 3. 点击Next创建空白工程 4. 给工程取个名字,叫MYIDEA 5. 勾选之后,点击This Window按钮 6. 我们可以 ...
- 工具 - VS Code
杂项 1. 主题 brackets light pro, One Monokai theme 2. directory tree indent guidelines, directory vertic ...
- 学习笔记(15)- 保险行业的问答语料 insuranceqa_data
数据概览 ''' pool data are translated Chinese data with Google API from original English data ''' POOL_T ...
- flex布局(非常重要)
首先明确一点是, flex 是 flex-grow.flex-shrink.flex-basis的缩写.故其取值可以考虑以下情况: flex 的默认值是以上三个属性值的组合.假设以上三个属性同样取默认 ...
- js中各种类型转换为Boolean类型
数据类型 转换为true的值 转换为false的值 Boolean true false String 任何非空字符串 空字符串 Number 任何非零数字值(包括无穷大) 0和null ...
- 事件类型-UI事件、焦点事件
DOM3级事件包括以下几类事件: UI事件:当用户与页面上的元素交互时触发 焦点事件:当元素获得或失去焦点时触发 鼠标事件:当用户通过鼠标在页面上执行操作时触发 滚轮事件:当使用鼠标滚轮时触发 文本事 ...
学习总结