Java子类的父类和要实现的接口有相同的方法/函数会冲突吗

答案是,不会。子类优先实现父类的方法,虽然父类的方法和接口的方法长得一模一样。

class father{
    public void f(){}
}
interface sameInterface{
    public void f();
}
class son extends father implements sameInterface{
    public void f(){
        //本函数实际实现的是父类的f(),而不是接口的f()
    }
}

注意:这种重叠在父类和接口均声明抛出异常时可能冲突。譬如,父类声明了异常1,接口声明了异常2。子类实现成员函数时,不能实现异常1或异常2,只能选择不实现异常。

class exception1 extends Exception{}
class exception2 extends Exception{}
class father{
    public void f()throws exception1{}
}
interface sameInterface{
    public void f()throws exception2;
}
class son extends father implements sameInterface{
    public void f(){
        //只能选择不实现异常,实现exception1或exception2都会报错
    }
}
时间: 2024-07-30 21:36:44

Java子类的父类和要实现的接口有相同的方法/函数会冲突吗的相关文章

Java拾遗(一):浅析Java子类和父类的实例化顺序 及 陷阱

本文主要介绍Java里经常使用的子类和父类的变量实例化顺序及陷阱,并结合一个Android实例来探讨此问题.日后编程中应尽量避免此陷阱. 首先看以下一段代码: 定义一个虚类Server.java package org.yanzi.test1; public abstract class Server { private static final int DEFAULT_PORT = 900; public Server() { // TODO Auto-generated constructo

java 子类重写父类的方法应注意的问题

若想实现一个合格重写方法,而不是重载,那么必须同时满足下面的要求! A.重写规则之一:    重写方法不能比被重写方法限制有更严格的访问级别.(但是可以更广泛,比如父类方法是包访问权限,子类的重写方法是public访问权限.) 比如:Object类有个toString()方法,开始重写这个方法的时候我们总容易忘记public修饰符,编译器当然不会放过任何教训我们 的机会.出错的原因就是:没有加任何访问修饰符的方法具有包访问权限,包访问权限比public当然要严格了,所以编译器会报错的. 反正子类

java子类与父类的关系

摘自翁恺老师的mooc 对理解继承来说,最重要的事情是,知道哪些东西被继承了,或者说,子类从父类那里得到了什么.答案是:所有的东西,所有的父类的成员,包括变量和方法,都成为了子类的成员,除了构造方法.构造方法是父类所独有的,因为它们的名字就是类的名字,所以父类的构造方法在子类中不存在.除此之外,子类继承得到了父类所有的成员. 但是得到不等于可以随便使用.每个成员有不同的访问属性,子类继承得到了父类所有的成员,但是不同的访问属性使得子类在使用这些成员时有所不同:有些父类的成员直接成为子类的对外的界

Java 子类初始化父类的构造方法 成员变量不支持多态

class Fu{ int a=2; Fu() { System.out.println("fu run"); }}class Zi extends Fu{ Zi() { System.out.println("zi run"); }} public class Copy { public static void main(String[] args) { Zi zi = new Zi(); System.out.println(zi.a); } } 运行结果为 f

java 子类、父类中静态代码块、字段,非静态代码块、字段以及构造函数的初始化顺序和次数

一个类中的数据初始化顺序是面试官非常喜欢出的面试题之一,本文用一个实例来介绍java中子类.父类中静态代码块.字段,非静态代码块.字段以及构造函数的执行顺序和次数. 一.包结构 Cat继承Animal Runner里包含main函数,程序入口 Sing类主要用来打印执行顺序的序列号 二.代码 public class Animal { Sing s1=new Sing(1,"animal\tnot static field"); static Sing s2=new Sing(2,&q

Java子类访问父类的私有成员变量

/**子类会继承父类所有的属性和方法. * 但是根据不同的权限标识符,子类不可见父类的私有变量,但可以通过父类的公共方法访问私有变量 * 所以对于重名变量,子类和父类都各有一份. * 对于子类和父类中重名的方法,则为重写.即子类重写了父类的方法,用于多态. * 同一个类中函数的签名不同,则为方法的重载.函数的签名为函数名+参数列表,与返回值无关. */

Java子类继承父类,当实例化子类对象时的执行顺序

子类继承父类,当实例化子类对象时,执行顺序如下:     父类层级静态块      自身静态块     父类块      父类构造器     自身块      自身构造器 由于继承,肯定应该先加载父类再加载子类,加载类自然会调用静态块,然后是调用父类的构造函数和子类的构造函数,不过构造函数调用前肯定要先调用域或块,这样才能正确创建对象. ················································赋值顺序如下:     父类的静态变量赋值     自身的静态变

java子类重写父类方法测试

父类 package com.yjm.Tes; public abstract class Ts { protected void Test(String str ,String s){ System.out.println("ts..."); } } 子类 package com.yjm.Tes; public class Test extends Ts { protected final void Test(String str, String s) { System.out.pr

java中,一个类实现某个接口,必须重写接口中的所有方法吗

不一定,关键要看子类是否是抽象类.如果子类是非抽象类,则必须实现接口中的所有方法: 如果子类是抽象类,则可以不实现接口中的所有方法,因为抽象类中允许有抽象方法的存在!1.抽象类定义抽象类往往用来表征对问题领域进行分析.设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象.通常在编程语句中用 abstract 修饰的类是抽象类.在C++中,含有纯虚拟函数的类称为抽象类,它不能生成对象:在java中,含有抽象方法的类称为抽象类,同样不能生成对象.抽象类是不完整的,它只能用作基类