今天在老师的带领下学习了抽象类(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学习-抽象类和接口-抽象类初体验的更多相关文章

  1. Java学习笔记 07 接口、继承与多态

    一.类的继承 继承的好处 >>使整个程序架构具有一定的弹性,在程序中复用一些已经定义完善的类不仅可以减少软件开发周期,也可以提高软件的可维护性和可扩展性 继承的基本思想 >>基 ...

  2. 深度学习之TensorFlow安装与初体验

    深度学习之TensorFlow安装与初体验 学习前 搞懂一些关系和概念 首先,搞清楚一个关系:深度学习的前身是人工神经网络,深度学习只是人工智能的一种,深层次的神经网络结构就是深度学习的模型,浅层次的 ...

  3. (数据科学学习手札35)tensorflow初体验

    一.简介 TensorFlow时谷歌于2015年11月宣布在Github上开源的第二代分布式机器学习系统,目前仍处于快速开发迭代中,有大量的新功能新特性在陆续研发中: TensorFlow既是一个实现 ...

  4. Java 学习笔记(7)——接口与多态

    上一篇说了Java面向对象中的继承关系,在继承中说到:调用对象中的成员变量时,根据引用类型来决定调用谁,而调用成员方法时由于多态的存在,具体调用谁的方法需要根据new出来的对象决定,这篇主要描述的是J ...

  5. Java学习5之接口

    接口不是类,而是一个特殊的名称,使用interface关键字.子类可以实现多个接口. 接口实现: public class Child extends Parent implements Interf ...

  6. java学习——JDK1.8接口和实现类

    Java 8 新特性:接口的静态方法和默认方法 https://blog.csdn.net/sun_promise/article/details/51220518 接口的默认方法和静态方法 http ...

  7. 1)Java学习笔记:接口和抽象类的异同

    Java接口和抽象类很像,他们有哪些相同点和异同点呢,下面我们做一个小结 相同 ① 都不能被实例化,都位于继承树的顶端,用于被实现或者继承 ② 都可以包含抽象方法,实现接口或者继承抽象类的普通子类都必 ...

  8. Java学习笔记之接口和抽象类

    接口(interface)1.interface创建一个接口,implements实现接口 interface jiekou{} class lie implements jiekou{}2.接口可以 ...

  9. 《JAVA学习笔记(14-10---14-11抽象类)》

    [14-10]面向对象-抽象类的产生 /* 描述狗,行为,吼叫. 描述狼,行为,吼叫. 发现他们之间有共性,可以进行向上抽取. 当然是抽取他们的所属共性类型,犬科. 犬科这类事物,都具备吼叫行为,但是 ...

随机推荐

  1. jquery发送请求的各种方法

    地址链接:https://www.cnblogs.com/java-dyb/p/10910566.html 关于向服务器传递数据的一些补充: json字符串与json对象之间的转换: JSON.par ...

  2. 拼接 字典序min

    给定一个字符串类型的数组strs,找到一种拼接方式,使得把所有字符串拼起来之后形成的字符串具有最低的字典序. 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个 ...

  3. java web 学生信息录入

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  4. JSON 解析中遇到的坑😭

    最近做加解密遇到一个很“奇葩的问题”,解析服务端加密后的字符串 序列化 时一直报错 "json解析失败:Error Domain=NSCocoaErrorDomain Code=3840 & ...

  5. 安装mysql常见错误解决方法

    Mysql ERROR 1698 (28000) 解决 解决mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exi ...

  6. python去除字符串中的特殊字符(爬虫存储数据时会遇到不能作为文件名的字符串)

    问题描述 今天在写爬虫爬取影评时,本来的思路把影评的标题作为文件名,将每个影评的详情内容写入到"标题.txt"文件中,直到我遇到了这个问题: 这时我突然意识到,文件名中有些字符是不 ...

  7. [python]python中的一些包以及他们的基本用处和安装

    pika可以用来连接rabbitmqpip install pika -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com ...

  8. DNS域名解析,内网

    1.登录DNS服务器 windows系统 2.打开dns程序,新建区域.如下图 按默认的选项就行 2.点击空白处的右键,新建主机 具体如下图 3.可以测试访问了 ,如果做过hosts文件的修改,本机的 ...

  9. kali安装vm tools正确操作

    参考博文:https://blog.csdn.net/qq_39536876/article/details/79501471 前言:每次在执行完 ./vmware-install.pl 重启后,总是 ...

  10. Servlet 学习(九)

    Listener 1.功能 Servlet 2.3 中新增加的另一个功能 作用是监听Java Web 程序中的事件 对应设计模式中的Listener 模式,当事件发生的时候会自动触发该事件对应的Lis ...