java子接口方法覆盖父接口方法的思考

接口List中继承接口Collection,接口Collection中存在size()方法,在接口List中又覆盖size()方法,意义何在?(覆盖了很多方法,见下图)

public interface List<E> extends Collection<E>

1.父接口和子接口都是抽象方法(未实现),子类没有改变父类的该方法,在功能层面的确是没有意义的。
2. 子类方法不能缩小所覆盖方法的访问权限和,但是接口里面的方法只能是public,所以子接口方法覆盖父接口方法不能改变方法的作用域。
    子类方法不能抛出比所覆盖方法更多的异常,所以子接口方法覆盖父接口方法不能改变方法可以改变方法的异常抛出。

3.子接口方法覆盖父接口方法更多是考虑到类的易读性,提醒使用者此处有这个方法。

interface A {
    void method() throws Exception;
}

interface B extends A {
    void method();  //这里没有抛出异常
}

public class C implements B {

    public static void main(String[] args)  {
        A a=new C();
        B b=new C();

        //捕获A类method方法的异常
        try {
            a.method();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        b.method();

    }

    @Override
    public void method() {
        System.out.println("method");
    }
}
时间: 2024-08-14 03:07:11

java子接口方法覆盖父接口方法的思考的相关文章

Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?

方法覆盖也称为重写,重写即子类重新定义了父类的方法. 重写: 1.重写的方法必须与原方法有相同的方法名.参数列表和返回值类型(Java SE5之后返回值类型可以是其类型的子类型) 2.被重写的方法不能是final类型,因为final类型无法重写 3.被重写的方法不能是private,因为private无法继承,而继承是重写的前提 4.被重写的方法不能为static, 如果父类中的方法为静态,而子类的方法不是静态的,但是两个方法除了这一点其他都满足重写条件,那么会发生编译错误,         

Java学习资料-方法覆盖、方法重载、多态与动态绑定

1.方法覆盖 方法覆盖就是子类定义一个和父类同名的方法来覆盖父类的方法.当父类方法在某些子类中被覆盖后,通常是子类调用父类,并做一些额外的其它工作. 使用方法覆盖应注意下面一些事项: 不使用super而希望引用父类方法会导致无限的递归,因为子类方法实际上是在调用它自己. 当通过父类引用调用一个方法时,Java会正确地选择与那个对象对应的类的覆盖方法.对于父类提供的方法,子类可以覆盖它,但这不是必须的,即子类也可以使用一个方法的父类版本. 方法覆盖中,子类在重新定义父类已有的方法时,应保持与父类完

java中接口的定义和接口的实现

1.接口的定义 使用interface来定义一个接口.接口定义同类的定义类似,也是分为接口的声明和接口体,其中接口体由常量定义和方法定义两部分组成.定义接口的基本格式如下: [修饰符] interface 接口名 [extends 父接口名列表]{ [public] [static] [final] 常量; [public] [abstract] 方法; } 修饰符:可选,用于指定接口的访问权限,可选值为public.如果省略则使用默认的访问权限. 接口名:必选参数,用于指定接口的名称,接口名必

java基础笔记(8)----接口

接口 是特殊的抽象类,纯抽象类---所有方法都是抽象方法 接口和抽象类的区别: 相同点: 编译后,会分别生成对应的.class文件 都不能创建对象(实例化),但是可以生成引用(使用多态) 不同点: 抽象类有构造方法:接口没有构造方法: 接口中的属性 默认是public static final的(常量): 接口中的方法 默认是public abstract的. 定义 接口的语法: 修饰符(public/默认) interface 接口名{} interface 子接口名 extends 父接口名

方法覆盖-Override

方法覆盖指的是如果在子类中定义的一个方法,其名称,返回类型及参数签名正好与父类中的某个方法的名称,返回类型及参数签名相匹配,那么就可以说子类的方法覆盖了父类的方法. 方法的覆盖必须满足多种约束,下面将一一进行介绍: (1)子类方法的名称,返回类型及参数签名必须与父类方法的名称,返回类型及参数签名一致. 例:如下代码将会导致编译错误 public class Base {     public void method(){              } } public class Sub ext

JAVA重载(overload)和覆盖(override)中你所不知道的陷阱

大家都知道重载是指在同一个类中,定义了有相同名称但是有不同参数类型的方法时,到底调用那一个方法会根据参数类型来选择.我们来看下面这个例子: public class ParentClass { } public class ChildClass extends ParentClass{ } public class Test { public void testOverLoad(ParentClass cls){ System.out.println("It's ParentClass"

Java TreeSet集合排序 &amp;&amp; 定义一个类实现Comparator接口,覆盖compare方法 &amp;&amp; 按照字符串长度排序

package TreeSetTest; import java.util.Iterator; import java.util.TreeSet; import javax.management.RuntimeErrorException; /* 可以对set集合中的元素进行排序,其底层的数据结构是二叉树, 保证元素唯一性的依据是compareTo和return 0; TreeSet排序的第一种方式 让元素自身具备比较性 元素需要实现Comparable接口,覆盖compareTo方法 这种方式

Java 8——接口中个的默认方法和静态方法

在Java SE 8之前,interface只是事物的抽象,用来定义统一的抽象事物和描述事物的抽象行为和属性. 但是在Java SE 8中,增加了可以在interface中增加默认实现的行为和事物的静态行为. 一.为什么? java迭代了如此多的版本且主要采用的都是演化的思想而非重构(为了保证与历史的兼容性). 这样就容易出现很多比较难以处理的问题,接口在发布之后就已经被定型,除非我们能够一次性更新所有该接口的实现.比如某个历史接口有很多实现,需要在历史接口中增加一个行为,那么久需要在它的所有实

Java语言程序设计 上机实验4 掌握声明接口、一个类实现接口的声明和使用方法

Java语言程序设计 上机实验4 实验目的: 理解接口的作用,理解接口和实现接口的类的关系,掌握声明接口.一个类实现接口的声明和使用方法:熟悉Java语言包和实用包中的常用类. 实验内容:(*)为选做 声明圆柱体类Cylinder,继承椭圆类Ellipse(实现周长Perimeter接口和面积Area接口),为圆柱体类设计较为全面的构造方法,并实现体积Volume接口,计算表面积和体积. 将Java的若干关键字(15个以上)保存在一个字符串数组中,对其按升序排列,再采用顺序查找和二分法查找,判断