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]面向对象-抽象类的产生 /* 描述狗,行为,吼叫. 描述狼,行为,吼叫. 发现他们之间有共性,可以进行向上抽取. 当然是抽取他们的所属共性类型,犬科. 犬科这类事物,都具备吼叫行为,但是 ...
随机推荐
- Deeplearning.ai课程笔记-改善深层神经网络
目录 一. 改善过拟合问题 Bias/Variance 正则化Regularization 1. L2 regularization 2. Dropout正则化 其他方法 1. 数据变形 2. Ear ...
- C:sizeof 运算符
sizeof不是函数,所以不需要包含任何头文件,它的功能是计算一个数据类型的大小,单位为字节 sizeof的返回值为size_t size_t类型在32位操作系统下是unsigned int,是一个无 ...
- C的精神
信任程序员 不要妨碍程序员做需要做的事 保持语言精练简单 只提供一种方法执行一项操作 让程序运行更快, 即使不能保证其可移植性 在最后一点上, 标准委员会的用意是: 作为实现, 应该针对目标计算机来定 ...
- opencv python:ROI 与 泛洪填充
提取ROI区域,处理然后放回去: 泛洪填充 测试代码:显示一张图像,鼠标点击之后,会从该点开始进行填充,显示填充后的结果图像 注:二值图像的填充需要使用选项:cv2.FLOODFILL_MASK_ON ...
- Feign代理必须加value否则启动失败
Feign代理必须加value否则启动失败 @RequestParam(value=”xxx”)
- ROS机器人系统学习——踩坑之路
推荐学习教程:深蓝学院 机器人操作系统ROS理论与实践学习 在学习到第2讲ROS基础的分布式通信时,一直卡在这里,主机开启小海龟后,从机虽然可以通过 rostopic list 列出当前的所有topi ...
- Golang介绍以及安装
Go语言 Google开源 编译形语言 21世纪的C语言 Go语言的特点 简单易并发 开发效率高 执行性能好 Go语言应用的领域 服务端开发 日志处理 文件系统 监控服务 容器虚拟化 Docker k ...
- 设计模式课程 设计模式精讲 3-10 里氏替换原则coding
1 代码演练 1.1 继承关系判别(是否是真正意义的继承) 1.2 入参控制 1.3 出参控制 1 代码演练 1.1 继承关系判别(是否是真正意义的继承)(其实我觉得这个例子有点牵强) 1.1.1 反 ...
- word2vec生成后缀名model文件处理
引入from gensim.models import word2vec 读取test02.model里面的词· model = word2vec.Word2Vec.load('test02.mode ...
- UITextField的快速基本使用代码块
概述 UITextField在界面中显示可编辑文本区域的对象. 您可以使用文本字段来使用屏幕键盘从用户收集基于文本的输入.键盘可以配置许多不同类型的输入,如纯文本,电子邮件,数字等等.文本字段使用目标 ...