接口(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是否为同类的更多相关文章

  1. Java 基础 面向对象- 成员内部类/局部内部类/举例Comparable 接口的匿名内部类

    笔记: package 任务135; /**类的 内部类, *1.相当于说, 我们可以在类的内部再定义类, * 2.成员内部类: * a.是外部类的一个成员,4个修饰符:static, final , ...

  2. JAVA基础——面向对象三大特性:封装、继承、多态

    JAVA面向对象三大特性详解 一.封装 1.概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: 只能通过规定的方法访问数据. ...

  3. JAVA(一)JAVA基础/面向对象基础/高级面向对象

    成鹏致远 | lcw.cnblog.com |2014-01-23 JAVA基础 1.开发环境搭建 JAVA程序的执行流程 JAVA命令->要使用一个*.class文件(类文件)->通过c ...

  4. Java基础-面向对象第三大特性之多态(polymorphism )

    Java基础-面向对象第三大特性之多态(polymorphism) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多态概述 多态是继封装,继承之后,面向对象的第三大特性,多态的 ...

  5. java基础面向对象之类与对象

    java基础面向对象之类与对象 2017-01-14 1.面向对象的基本概念 以一种组建化的形式进行代码设计 1)在面向对象程序设计中包含有如下几种特性 •封装性:保护内部结构的安全性 •继承性:在已 ...

  6. Java基础-面向对象第二特征之继承(Inheritance)

    Java基础-面向对象第二特征之继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承的概述 在现实生活中,继承一般指的是子女继承父辈的财产.在程序 ...

  7. Java基础-面向对象第一特性之封装(Encapsulation)

    Java基础-面向对象第一特性之封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.理解什么是面向过程和面向对象 面向过程与面向对象都是我们编程中 ...

  8. java基础—面向对象2

    一.JAVA类的定义

  9. 第二十七节:Java基础面向对象-静态,单例模式,继承详情知识点

    前言 Java基础面向对象-静态,单例模式,继承详情知识点.静态-static关键字,static变量,静态代码块,代码块(不加静态),对象创建过程,单例模式,继承. 静态-static关键字 // ...

随机推荐

  1. c#关于Dictionary中自定义Key

    Dictionary 描述 字典 Dictionary 通过 Hash 桶算法进行O(1)查找数据,在 Hash 碰撞达到一定次数后会自动进行 Resize,也会在数组大小不足的时候会自动进行Resi ...

  2. linux-centos7安装Oracle11gr2数据库(在图形界面下)

    修改操作系统核心参数 在Root用户下执行以下步骤: 1)修改用户的SHELL的限制,修改/etc/security/limits.conf文件 oracle soft nproc 2047 orac ...

  3. asp.net core-14.JWT认证授权 生成 JWT Token

    源码下载 语言组织能力不好 ,看这个 视频 用visual studio code打开文件,运行dotnet watch run 之后在postman里面去访问 拿到Token后

  4. 怎样通过混入(Mixin)实现多继承

    js不提供现成的多重继承的方法, 但可以通过Object.assign()来手动实现: function Father1(name){ this.name = name; } function Fat ...

  5. 怎样手写实现 new 命令的功能

    实现new命令的功能, 首先需要知道new命令都做了些什么: 第一步: 创建一个空对象, 作为实例对象的容器; 第二步: 将空对象的prototype指向构造函数的prototype; 第三步: 将空 ...

  6. Java BinarySearch

    Java BinarySearch /** * <html> * <body> * <P> Copyright 1994-2018 JasonInternation ...

  7. WebApi 全局异常与局部异常

    全局异常过滤器 public class ApiExceptionFilter:ExceptionFilterAttribute { private IHostingEnvironment _env; ...

  8. dotnetcore下解压zip文件,解决中文文件名乱码问题

    (迄今为止网上那些说的用Encoding.Default解决中文文件名乱码的都不能真正解决问题!) 1.在程序开始处 Encoding.RegisterProvider(CodePagesEncodi ...

  9. mysql 2 修改表

    1 修改表名 rename table aaa to bbb; 或者 rename table aaa to bbb; 2 修改字段的数据类型 alter table person modify na ...

  10. mysql8中查询语句表别名不能使用 “of”

    今天在迁移一个项目的时候,发现有一个sql报错,但是语句跟迁移之前完全一样,所以想来应该是 mysql 版本差异导致的. 迁移之前版本:5.6.28(腾讯云) 迁移之后版本:8.0.16(阿里云) 新 ...