目录

写一段程序,实现shape面积,并可以对面积大小排序

定义父类shape类,并定义方法Area()

定义第一个子类Circle类

定义第二个子类Rect类

定义接口Comparator,并写入compare()方法

定义接口ISorter,继承Comparator类,并写入sorter()方法

定义AreaComparator类,实现Comparator接口

定义BubbleSorter类继承AreaComparator类,实现ISorter,Comparator接口

定义SelectSorter类继承AreaComparator类,实现ISorter,Comparator接口

定义Main类,写入主函数

关于这三种方法

一.定义一个AreaComparator的对象

二.不用定义对象,用lambda表达式(更加简洁,但是比较适合较为简单的关系)

三.不用定义对象,直接用匿名内部类

笔记:

关于接口(impelements,Interface)

关于继承(extends)

使用super调用父类中重写的方法、访问父类中被隐藏的字段


写一段程序,实现shape面积,并可以对面积大小排序

定义父类shape类,并定义方法Area()

public class Shape {public  double Area() {return 0;}
}

定义第一个子类Circle类

包括圆心的坐标 x,y 圆的半径 r,构造函数及重写父类的Area()方法

public class Circle extends Shape {public int x;public int y;public int r;Circle(int xx,int yy,int rr){this.x=xx;this.y=yy;this.r=rr;}public double Area() {      return r*r*3.14;        }}

定义第二个子类Rect类

包括矩形的长、宽 x,y,构造函数及重写父类的Area()方法

public class Rect extends Shape{public int x;public int y;Rect(int xx,int yy){this.x=xx;this.y=yy;}public double Area() {      return x*y;     }}

定义接口Comparator,并写入compare()方法

用来比较面积

public interface Comparator {public boolean compare(Shape s1,Shape s2);
}

定义接口ISorter,继承Comparator类,并写入sorter()方法

用来排序

public interface ISorter extends Comparator{public void sorter(Shape[] ss,Comparator c);
}

定义AreaComparator类,实现Comparator接口

public class AreaComparator implements Comparator{public boolean compare(Shape s1,Shape s2) {return (s1.Area()>s1.Area()) ? true :false;}
}

定义BubbleSorter类继承AreaComparator类,实现ISorter,Comparator接口

这是冒泡排序的排序方法

public class BubbleSorter extends AreaComparator implements ISorter,Comparator{public void sorter(Shape[] ss,Comparator c) {for(int i=0;i<ss.length-1;i++) {for(int j=0;j<ss.length-1-i;j++) {if(c.compare(ss[i], ss[j])) {Shape a=ss[j];ss[j]=ss[i];ss[i]=a;}}}}}

定义SelectSorter类继承AreaComparator类,实现ISorter,Comparator接口

这是选择排序的排序方法

public class SelectSorter extends AreaComparator implements ISorter,Comparator {public void sorter(Shape[] ss,Comparator c) {for(int i=0;i<ss.length;i++) {int minindex=i;for(int j=i+1;j<ss.length;j++) {if(c.compare(ss[minindex], ss[j])) {minindex=j;}Shape a=ss[minindex] ;ss[minindex]=ss[j];ss[j]=a;}}
}}

定义Main类,写入主函数

其中AreaComparator方法可以用对象,lambda表达式,匿名内部类实现

public class Main {public static void main(String[] args) {Shape[] sss=new Shape[6];for(int i=0;i<sss.length;i++) {sss[i]=new Rect(i,i);}ISorter sort=new BubbleSorter();       //普通写法Comparator c= new AreaComparator();    //普通写法sort.sorter(sss, c);                   //普通写法System.out.println("==========普通写法=========");for(int i=0;i<sss.length;i++) {System.out.println(sss[i].Area());}Shape[] shape=new Shape[6];for(int i=0;i<shape.length;i++) {shape[i]=new Rect(i,i);}sort.sorter(shape, new Comparator() {                 //匿名内部类public boolean compare(Shape s1,Shape s2) {        //匿名内部类return (s1.Area()>s1.Area()) ? true :false;    //匿名内部类}                                                  //匿名内部类});System.out.println("==========匿名内部类=========");for(int i=0;i<shape.length;i++) {System.out.println(shape[i].Area());}System.out.println("==========Lambda表达式=========");Shape[] ss=new Shape[6];for(int i=0;i<ss.length;i++) {ss[i]=new Circle(i,i,i);}sort.sorter(ss, (s1,s2)->(s1.Area()>s2.Area()));     //Lambda表达式for(int i=0;i<ss.length;i++) {System.out.println(ss[i].Area());}}
}

工作区图片

关于这三种方法

一.定义一个AreaComparator的对象

Comparator c= new AreaComparator();

将对象传入

sort.sorter(sss, c);

二.不用定义对象,用lambda表达式(更加简洁,但是比较适合较为简单的关系)

sort.sorter(ss, (s1,s2)->(s1.Area()>s2.Area()));

三.不用定义对象,直接用匿名内部类

sort.sorter(shape, new Comparator() {               
            public boolean compare(Shape s1,Shape s2) {      
                return (s1.Area()>s1.Area()) ? true :false;   
            }                                                  
        })
;

笔记:

关于接口(impelements,Interface)

  • 接口时为了弥补JAVA单继承的缺陷
  • 在实现接口的时候,必须实现接口内的所有方法
  • 抽象方法只能存在于抽象类或者接口中,但抽象类中却能存在非抽象方法,即有方法体的方法
  • 接口是百分之百的抽象类
  • 我们不能直接去实例化一个接口,因为接口中的方法都是抽象的,是没有方法体的
  • 我们可以使用接口类型的引用指向一个实现了该接口的对象,并且可以调用这个接口中的方法(如:Comparator c=new AreaComparator)
  • 用接口可以降低耦合性

关于继承(extends)

  • 每个类都只能继承一个父类
  • 每一个类都继承super()类(超级父类)
  • 在子类中被重写的方法,其访问权限允许大于但不允许小于被其重写的方法,比如在父类中是protected,在子类中可以是public,但不可以是private
  • 子类继承其父类的所有public和protected成员,但不能继承其父类的private成员
  • 当调用被重写的方法时,调用的版本是子类的方法;
  • 当调用被隐藏的方法时,调用的版本取决于是从父类中调用还是从子类中调用。
  • 使用super调用父类中重写的方法、访问父类中被隐藏的字段

  • 对父类的构造放的调用必须放在子类构造方法的第一行
  • 如果父类构造器没有参数,则在子类的构造方法中不需要使用 super 关键字调用父类构造方法
  • 如果父类的构造方法带有参数,则必须在子类的构造方法中显式地通过 super 关键字调用父类的构造方法

JAVA笔记:shape类(接口,继承,lambda表达式...)相关推荐

  1. JAVA学习笔记 15 - 函数式接口、Lambda表达式和方法引用

    本文是Java基础课程的第十五课.主要介绍在JDK8中,Java引入的部分新特性,包括函数式接口.Lambda表达式和方法引用.这些新特性使得Java能够在按照面向对象思想进行开发的基础上,融合函数式 ...

  2. Java笔记 - 黑马程序员_08(Lambda表达式,接口组成更新,方法引用,类加载器,反射)

    1. Lambda 1.1 函数式编程思想概述 在数学中,函数就是有输入量.输出量的一套计算方案,也就是"数据做操作" 面向对象思想强调"必须通过对象的形式来做事情&qu ...

  3. 【java笔记】类/接口作为成员变量类型

    类/接口  作为成员变量 以英雄角色为例,有姓名,年龄,武器(类),技能(接口),攻击(方法) 技能接口: public interface Skill {void use();//使用技能的抽象方法 ...

  4. 【Java】 第六章 接口、lambda 表达式与内部类 Java核心技术卷1基础知识原书第10版 读书笔记

    第六章 接口.lambda表达式与内部类 6. 接口.lambda 表达式与内部类 6.1 接口 6.1.1 接口概念 6.1.2 接口的特性 6.1.3 接口与抽象类 6.1.4 静态方法 6.1. ...

  5. CoreJava 笔记总结-第六章 接口、lambda表达式与内部类

    文章目录 第六章 接口.lambda表达式与内部类 ==接口== 接口的概念 接口的属性 接口与抽象类 静态和私有方法 默认方法 解决默认方法冲突 接口与回调 `Comparator`接口 对象克隆 ...

  6. java 函数式接口与lambda表达式的关系

    函数式接口与lambda表达式的关系 在java中,lambda表达式与函数式接口是不可分割的,都是结合起来使用的. 对于函数式接口,我们可以理解为只有一个抽象方法的接口,除此之外它和别的接口相比并没 ...

  7. Java 核心技术卷1 --第六章 接口、lambda表达式和内部类

    吧Github代码链接: https://github.com/deyou123/corejava.git 第六章 接口.lambda表达式和内部类 6.1 接口 6.1.1 接口概念 接口不是类,而 ...

  8. Java新特性:Java8函数式接口与Lambda表达式(一)

    摘要 何为函数式接口? 什么是lambda表达式,lambda表达式的本质: 函数式接口与lambda表达式的联系:lambda是实现函数式接口的一个快捷方式,可以作为函数式接口的一个实例: 常用Ja ...

  9. Lambda01 编程范式、lambda表达式与匿名内部类、函数式接口、lambda表达式的写法...

    1 编程范式 主要的编程范式有三种:命令式编程,声明式编程和函数式编程. 1.1 命令式编程 关注计算机执行的步骤,就是告诉计算机先做什么后做什么 1.2 声明式编程 表达程序的执行逻辑,就是告诉计算 ...

最新文章

  1. OpenCASCADE绘制测试线束:OCAF 命令之标准演示命令
  2. 百度转换经纬度为地址
  3. 万恶之源 - Python基础数据类型一
  4. 同步设备IO与异步设备IO
  5. 用闭包的写法弹出元素的索引值
  6. hadoop配置文件还原_hadoop配置文件详解,安装及相关操作
  7. 加盟商最大的顾虑是什么?
  8. oracle number +1,number number(1)
  9. python请编写程序、生成随机密码_python习题:登录注册小程序(用户名密码存在文件中)、生成随机密码小程序...
  10. python车辆型号识别_python获取服务器的厂商和型号信息
  11. 理论+故事,开启你的量化阅读之旅
  12. android 如何绕过签名校验
  13. 在MySQL中实现交叉表查询2(动态交叉表)
  14. CAD矩形阵列应用与实战技巧
  15. 屏幕绘画 V1.1 - 一念(VB 绘制 图形)
  16. 用css写平行四边形
  17. char和数值的类型转换
  18. J2ME开发环境部署!
  19. 安卓 蓝牙遥控器键值配对 kl文件
  20. postman显示返回的base64图片验证码、二维码

热门文章

  1. Python基础---超市买水果小程序
  2. 编程,写代码不是关键。学习人物经验系列(一)
  3. 什么是端口(port)?
  4. Python 外星人入侵游戏(一):武装飞船(下)
  5. Arbitrage(套利)
  6. oracle正则判断纯数字,oracle 判断字段是否为是数字 regexp_like用法 正则表达式
  7. 秦朝是一个法治国家吗?
  8. 求圆周率π的近似值(精确到小数点第5位或第7位)
  9. 标题击中率对SEO排名有多大影响?
  10. postgreSQL GROUP BY