Java 基础 面向对象: 接口(interface )概念 以及接口之练习3 -定义一个接口用来实现两个对象的比较并 判断instanceof是否为同类
接口(interface )概念概念笔记 及测试代码:
/** 面向对象: 接口(interface ) 是与类并行的一个概念:
* 1.接口可以看成一个特殊的抽象类,它是常量与抽象方法的一个集合
* 2.接口里的常量默认: public static final 类型!
* 3.接口里的抽象方法,默认所有方法是: public abstract 修饰
* 4.接口没有构造器.
* 5.接口定义的是一种功能 ,此功能可以被类所实现(implements),比如:class BB (extends DD) implements AA;
* 6.实现接口的类必须重写其中的所有抽象类,方可实例化;若没有重写所有的抽象方法,则此类仍是一个抽象类.
* 7.类是可以实现(implements )多个接口, 类的继承(extends)是单继承!
* 8.接口与接口之间的继承关系,是可以多继承!一个可以继承多个!
* ----------
** 接口与具体的实现类之间也存在多态性
* 1.通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系
* 2.接口主要用于定义规范,解除耦合关系.
*/
测试代码:
public class Main_of_Coding { //TestAbstract
public static void main(String[] args) {
Duck d=new Duck();
d.fly();
d.run();
d.swim();
System.out.println("*************");
Main_of_Coding.test1(d);
Main_of_Coding.test2(d);
Main_of_Coding.test3(d);
}
public static void test1(Runner r){
r.run();
}
public static void test2(Swimmer s){
s.swim();
}
public static void test3(Flier f){
f.fly();
}
}
interface Runner{
public abstract void run();
}
interface Swimmer{
void swim();
}
interface Flier{
void fly();
}
class Duck implements Runner,Swimmer,Flier{
@Override
public void run() {
System.out.println("鸭子跑啊跑,不然变成黄焖鸭!");
}
@Override
public void swim() {
System.out.println("红掌拨清波");
}
@Override
public void fly() {
System.out.println("丑小鸭也可以变成白天鹅!");
}
}
测试输出:
丑小鸭也可以变成白天鹅!
鸭子跑啊跑,不然变成黄焖鸭!
红掌拨清波
*************
鸭子跑啊跑,不然变成黄焖鸭!
红掌拨清波
丑小鸭也可以变成白天鹅!
练习3:
练习要求:
/** 面向对象: 接口之练习3
* 定义一个接口用来实现两个对象的比较。
* interface CompareObject{
* public int compareTo(Object o); //若返回值是 0 , 代表相等; 若为正数,代表当前对象大;负数代表当前对象小
* }
* 定义一个Circle类。
* 定义一个ComparableCircle类,继承Circle类并且实现CompareObject接口.
* 在ComparableCircle类中给出接口中方法compareTo的实现体,用来比较两个圆的半径大小。
* 定义一个测试类TestInterface,创建两个ComparableCircle对象,调用compareTo方法比较两个类的半径大小。
*/
编写代码:
public class Main_of_Coding { //TestAbstract
public static void main(String[] args) {
ComparableCircle c1=new ComparableCircle(1);
ComparableCircle c2=new ComparableCircle(2);
ComparableCircle c3=new ComparableCircle(3);
System.out.println(c1.CompareTo(c1));
System.out.println(c1.CompareTo(c2));
System.out.println(c1.CompareTo(c3));
// System.out.println(c1.CompareTo(new String("6666")));
}
}
interface CompareObject{
public int CompareTo(Object o);
}
class Circle{
int radio;
public Circle(int radio) {
this.radio = radio;
}
public int getRadio() {
return radio;
}
public void setRadio(int radio) {
this.radio = radio;
}
}
class ComparableCircle extends Circle implements CompareObject{
public ComparableCircle(int radio) {
super(radio);
}
@Override
public int CompareTo(Object o) {
if(this==o)
return 0;
else if(o instanceof ComparableCircle){ //判断o是否是ComparableCircle
ComparableCircle c=(ComparableCircle)o;
if(this.getRadio()>c.getRadio())
return 1;
else if(this.getRadio()<c.getRadio())
return -1;
else
return 0;
}
else{
// return -2;
throw new RuntimeException("传入的非ComparableCircle对象 不可进行比较!");
}
}
}
输出结果:
0
-1
-1
添加测试代码段:
System.out.println(c1.CompareTo(new String("6666")));
结果:
Exception in thread "main" java.lang.RuntimeException: 传入的非ComparableCircle对象 不可进行比较!
at Coding.ComparableCircle.CompareTo(Main_of_Coding.java:61)
at Coding.Main_of_Coding.main(Main_of_Coding.java:21)
Java 基础 面向对象: 接口(interface )概念 以及接口之练习3 -定义一个接口用来实现两个对象的比较并 判断instanceof是否为同类的更多相关文章
- Java 基础 面向对象- 成员内部类/局部内部类/举例Comparable 接口的匿名内部类
笔记: package 任务135; /**类的 内部类, *1.相当于说, 我们可以在类的内部再定义类, * 2.成员内部类: * a.是外部类的一个成员,4个修饰符:static, final , ...
- JAVA基础——面向对象三大特性:封装、继承、多态
JAVA面向对象三大特性详解 一.封装 1.概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: 只能通过规定的方法访问数据. ...
- JAVA(一)JAVA基础/面向对象基础/高级面向对象
成鹏致远 | lcw.cnblog.com |2014-01-23 JAVA基础 1.开发环境搭建 JAVA程序的执行流程 JAVA命令->要使用一个*.class文件(类文件)->通过c ...
- Java基础-面向对象第三大特性之多态(polymorphism)
Java基础-面向对象第三大特性之多态(polymorphism) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多态概述 多态是继封装,继承之后,面向对象的第三大特性,多态的 ...
- java基础面向对象之类与对象
java基础面向对象之类与对象 2017-01-14 1.面向对象的基本概念 以一种组建化的形式进行代码设计 1)在面向对象程序设计中包含有如下几种特性 •封装性:保护内部结构的安全性 •继承性:在已 ...
- Java基础-面向对象第二特征之继承(Inheritance)
Java基础-面向对象第二特征之继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承的概述 在现实生活中,继承一般指的是子女继承父辈的财产.在程序 ...
- Java基础-面向对象第一特性之封装(Encapsulation)
Java基础-面向对象第一特性之封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.理解什么是面向过程和面向对象 面向过程与面向对象都是我们编程中 ...
- java基础—面向对象2
一.JAVA类的定义
- 第二十七节:Java基础面向对象-静态,单例模式,继承详情知识点
前言 Java基础面向对象-静态,单例模式,继承详情知识点.静态-static关键字,static变量,静态代码块,代码块(不加静态),对象创建过程,单例模式,继承. 静态-static关键字 // ...
随机推荐
- discuz 访问 Discuz! Database Error(2002) notconnect
网站四五年了,今天突然访问,提示这个错误,在通过阿里云后台查看 CPU 一直处于100%,通过xshell 登录 OK 先看下数据库 不能重启,原来是数据库日志被写满了. /var/log/httpd ...
- vue 强制组件重新渲染
参考链接:https://blog.csdn.net/zyx1303031629/article/details/86656785
- javascript高德地图放到网页中的方法
javascript高德地图放到网页中的方法 1 先获取到经纬度http://lbs.amap.com/console/show/picker 2 下面代码直接设置下中心点 和标记点就可以了 < ...
- Java最全锁剖析:独享锁/共享锁+公平锁/非公平锁+乐观锁/悲观锁
乐观锁 VS 悲观锁 乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度,在Java和数据库中都有此概念对应的实际应用. 1.乐观锁 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会 ...
- 如何制作windows live writer绿色便携版
如何制作windows live writer绿色便携版 2013年10月03日 ⁄ 综合 ⁄ 共 463字 ⁄ 字号 小 中 大 ⁄ 评论关闭 制作一个绿色便携版的wlw 1.首先下载 techli ...
- [LuoguP1155]双栈排序_二分图_bfs
双栈排序 题目链接:https://www.luogu.org/problem/P1155 数据范围:略. 题解: 神仙题. 就第一步就够劝退了. 这个二分图非常不容易,首先只有两个栈,不是属于一个就 ...
- [转帖]linux下的find文件查找命令与grep文件内容查找命令
linux下的find文件查找命令与grep文件内容查找命令 https://www.cnblogs.com/shileima/p/8431393.html 在使用linux时,经常需要进行文件查找. ...
- Docker下搭建mongodb副本集
背景 有需求需要对mongodb做一个容灾备份.根据官网,发现mongodb最新版本(4.0)已经抛弃了主从模式而采用副本集进行容灾.副本集的优势在于:"有自动故障转移和恢复特性,其任意节点 ...
- SQLite基础-1.SQL简介
目录 一.SQLite简介 二.SQLite命令 三.SQLite安装 在 Windows 上安装 SQLite 四.SQLite 点命令 一.SQLite简介 最近在使用Python+Flask框架 ...
- GBK字符集
GBK字库 编辑 同义词 GBK一般指GBK字库 GBK全称<汉字内码扩展规范>(GBK即“国标”.“扩展”汉语拼音的第一个字母,英文名称:Chinese Internal Code Sp ...