首页 > 编程语言 >Java高手请进:关于接口的问题。

Java高手请进:关于接口的问题。

时间:2022-11-21 00:46:08浏览次数:40  
标签:高手 Java void 接口 println 提辖 方法 public

《鲁提辖剃度》

和尚要做什么呢,要吃斋(chiZai())、念经(nianJing())、打坐(daZuo())、撞钟(zhuangZhong())、习武(xiWu())等。如果设计一个和尚(Monk)接口,给出所有和尚都需要实现的方法,那么这个接口应当如下:

public interface Monk {
    public void chiZai(); //吃斋
    public void nianJing(); //吃斋
    public void daZuo(); //打坐
    public void zhuangZhong(); //撞钟
    public void xiWu(); //习武
    public String getName(); //问名字
}

显然,所有的和尚都应当实现接口所定义的全部方法,不然就根本过不了Java语言编译器这一关。象下面的鲁提辖(LuTiXia)类就不行,其代码如下:

public class LuTiXia implements Monk {
    public void XiWu() {
        System.out.println("拳打镇关西");
        System.out.println("大闹五台山");
        System.out.println("大闹桃花村");
        System.out.println("火烧瓦官寺");
        System.out.println("倒拔垂杨柳");
    }
    public String getName() {
        return "鲁智深";
    }
}

由于鲁提辖只实现了getName()和xiWu()方法,而没有实现任何其他方法。因此,他根本就通不过Java语言编译器。如果鲁提辖实现所有的方法,鲁提辖也就不是鲁提辖了。

要求:你能修改上述设计方案,使鲁提辖不必实现所有方法,仍能遁入佛门吗?请用Java语言实现你的设计方案。

实现方式一:

abstract class Monk {
    public void chiZai() {} //吃斋
    public void nianJing() {} //念经
    public void daZuo() {} //打坐
    public void zhuangZhong() {} //撞钟
    public void xiWu() {} //习武
    public String getName() { //问名字
        return null;
    }
}

思路

其实这个题目考的是接口抽象类的区别。
把接口改为抽象类,抽象类中对每个方法做一个默认的实现。
每个子类就可以自由的重写一个或某几个方法。
鲁提辖继承此抽象类,重写想重写的方法就行了。

扩展

刚学完JDK8 新特性_默认方法,是否也可以使用这种方法解决?把接口方法都定义为默认方法,类实现时重写想重写的方法就行了。

标签:高手,Java,void,接口,println,提辖,方法,public
From: https://www.cnblogs.com/nylgwn/p/16910143.html

相关文章

  • Java中使用javassist库动态操作类
    它是一个用来处理Java字节码的类库,也就是说没有.java文件,用它可以直接造一个.class文件。直接创建一个class类例如:importjavassist.*;/***使用javassist库*/......
  • 接口中定义静态方法和默认方法(JDK8)
    JAVA8之前,接口里的方法要求全部是抽象方法。JAVA8(含8)之后,以后允许在接口里定义默认方法和静态方法。JDK8新特性_默认方法Java8及以上新版本,允许给接口添加一个......
  • 新手随笔java+cpp
    随便写写关于java和cpp感悟·1.初学java(在学ing),学了几个月cpp(也不算熟练,但是目前比java好点)·2.java应该是更灵活的,比如【一些灵活点和区别】,二维数组不是非要矩阵形......
  • LinkedList底层 和 实现LIst接口 3种遍历方式
       底层!    底层2.0(删除)  实现LIst接口3种遍历方式 ......
  • javascript - 练习题:事件练习 - 贪吃蛇
    贪吃蛇原生JS(非面向对象的方式),渡一教学的笔记;地图坐标{0,0}{1,0}{2,0}{3,0}{4,0}{0,1}{1,1}{2,1}{3,1}{4,1}{0,2}{1,2}{2,2}{3,2}{4,2}{0,3}{1,3}{2,3}{3,3}{4,3}{0,4}{1,4}......
  • J-Link调试STM32F7不能下载程序到ITCM接口的Flash
    问题描述STM32F7的Flash可以在两个地址空间可见,一是AXIM接口的0x08000000处,二是ITCM接口的0x00200000处。如果将Flash定位到0x08000000处,使用J-Link调试下载程序没有问题;如......
  • JDK8开始接口新增方法,使用接口的注意事项
    JDK8版本开始后,Java只对接口的成员方法进行了新增项目Version2.0需要对Inter接口丰富,加入10个新的抽象方法,此时改了接口就要所有实现类实现这些方法。允许接口中直接定......
  • java-网络编程
    一、概述1、两个主要问题(1)如何准确定位网络上一台或多台主机;定位主机上的特定应用(2)找到主机后如何可靠高效的进行数据传输2、两个要素(1)IP和端口号(2)网络通信协议(OSI参......
  • Wust Java Club 2022-2023上半学年中期考核
    WustJavaClub2022-2023上半学年中期考核前言提交时的注意事项不可写入包名,如packageedu.wust必须有且只能有一个公有类publicclassMain,若有其他类,不应给其赋为......
  • JAVA 代码优化
    1基本类型使用优化1.1尽量重用对象特别是对于String对象的使用,如需拼接字符串,使用如下例子://拼接字符串,不重视效率的写法Stringstr1="aaa";str1=str1+"bbb"......